浏览 1923 次
锁定老帖子 主题:IOCP的分层一
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-13
最后修改:2010-04-16
写网络代码时,总希望把逻辑和网络层分开。而在IOCP这样的高并发连接时,Get中返回所带的Key性价比让人垂涎不止。可以把逻辑和网络当成一个对象通过KEY返回,也可以通过一个网络ID,来查找逻辑对象。来讨论下前者: 当Accept时,申明出一个IOCP_KEY进行维护。Get获得IOCP_KEY时,下一步就是传给上层的逻辑处理。而做法上又不想把整个IOCP_KEY给上层,这样的话结构之间耦合太紧。对上层来说,必须的是一个收到的协议包内容,一个逻辑对象(看需求也可以加入一个网络对象进行直发).所以添加了一个bridge文件,专门取出有用的信息,独立在两者之间。具体的框架图如下:
明显的,逻辑对象被搁在了网络层的最低端,虽然可以通过Bridge进行拆分,但是整体的架构上隐患很多。 那么,如果把NetObject和LogicObject分开,逻辑对象.h自然的回到World的级别上来(图不给了,想象)。看了一些代码发现很多都是通过一个共同的ID来查找。即IOCP获得NetObject(IOCP_KEY)中的ID后,同时查找到LogicObject的ID,然后返回。采用HASH的方法效率虽然可以接受,但是还有更好的o(1)复杂度算法。(提示,链表+数组) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |