论坛首页 编程语言技术论坛

IOCP的分层一

浏览 1923 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-13   最后修改:2010-04-16

      写网络代码时,总希望把逻辑和网络层分开。而在IOCP这样的高并发连接时,Get中返回所带的Key性价比让人垂涎不止。可以把逻辑和网络当成一个对象通过KEY返回,也可以通过一个网络ID,来查找逻辑对象。来讨论下前者:
      IOCP_KEY={NetObject, LogicObject}; //暂时结合在一起

      当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)复杂度算法。(提示,链表+数组)

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics