采用epoll模型服务器连接管理器实现
来源:互联网 发布:java游戏大全 编辑:程序博客网 时间:2024/05/16 10:40
【应用场景】
在网络服务器中,需要维护所有连接信息,通常是以fd做为key,连接信息结构体做为value。每次有新连接接入时,需求加入一个映射关系;每次有新数据到达时,需要根据对应的fd查询到对应的连接信息结构。
通过上面的场景我们可以抽象出来一类数据,数据的特点如下:
- 数据有多条,支持增、删、改
- 数据结构有唯一的索引,且索引号动态分配
- 需要很方便的根据key查询到value(这里是性能的关键)
- 记录数有上限(不是必要的,但通常都需要,比较TCP连接就需要)
【解决方案】
一种解决方案是,把信息保存在map或hash_map中,可以根据key方便的增、删、查对应的结构。不过,这两种存储方式都有一点的缺点,map查询的时间复杂度是o(logn),hash_map查询的时间复杂度是o(1),但是会分配一定的冗余空间。同时这两种方式都需要单独维护一个记录数上限。下面讨论一种基于下标查询的优化方案。
【方案优化】
就查询效率而言,数组下标索引的时间复杂度是最低的o(1),因此我们可以考虑把所有的记录都使用下标进行索引,但因为key是动态分配的,比如TCP连接的fd就是系统分配的,因此fd是不适合做下标的,所以我们可以把下标信息保存在key信息中。每次获得key信息后,从
key信息中解出下标,然后直接通过下标进行索引。 这种方案对应用场景又加了一条限制,就是“每次获取到的key信息有冗余字段可以保存下标”,因为这个方案是从epoll服务模型中抽象出来的,更多的应用场景有待发据掘。
【代码示例】
下面以基于epoll模型的服务器中连接管理为例介绍优化方案的实现。
- 采用epoll模型服务器连接管理器实现
- Epoll模型服务器实现
- epoll模型设计海量级连接服务器
- epoll模型设计海量级连接服务器
- epoll模型设计海量级连接服务器
- epoll模型服务器
- 一个回射服务器程序,采用reactor模型和epoll多路复用
- Linux下基于EPOLL 模型,实现用户登录,客户端采用QT
- Epoll 模型实现
- 服务器epoll+thread pool模型
- epoll模型之服务器设计
- epoll实现web服务器
- epoll服务器代码实现
- 采用epoll实现多客户server端
- 采用epoll实现echo server和client
- epoll基本模型案例实现
- epoll模型的实现原理
- nginx采用epoll的事件模型,为何效率高
- CVSNT配置及其与eclipse集成开发项目管理
- 用PHP写的一个生成标准缩略图的类
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(三)
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(四)
- 自己手动获取MyEclipse 注册码
- 采用epoll模型服务器连接管理器实现
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)
- Jun.16 Diary today
- 桥接模式(Bridge Pattern)
- WebGIS:一个图层的傻瓜式完整发布过程(二)
- 达芬奇处理器的H264编码关键模块的实现研究----笔记
- Silverlight 上传大文件问题
- IntelliJ IDEA 目录技巧
- 查看端口使用情况