框架设计网络的通信论文.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
框架设计网络的通信论文

框架设计网络的通信论文   1BillingNTC的由来  1.1网络通信框架  1.1.1UNIXSAP/TERMSAP  轻量级的unixsap,termsap网络通讯组件,是对Socket的封装结合系统消息队列,但不支持跨平台,且只负责数据的收发,不涉及协议分析和组包。  1.2业界的相关库  1.2.1ACE  ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候,要根据情况,看从哪一层来进行使用。支持跨平台。  1.2.2Libevent  Libevent是一个C语言写的网络库,官方主要支持的是类Linux操作系统,最新的版本添加了对Windows的IOCP的支持。在跨平台方面主要通过“select”模型来进行支持。  1.2.3Libev  与Libevent一样,Libev系统也是基于事件循环的系统,它在poll()、“select”()等机制的本机实现的基础上提供基于事件的循环。Libev实现的开销更低,能够实现更好的基准测试结果。  1.3BillingNTC  在IO多路复用为基础的,ACE,Libevent,Libev这些网络框架要不就是非常庞大(ACE),不利于集成;要不就是使用Callback的回调机制,对于固定的事件不如C++的虚函数多态方式。此外并没有对协议进行细分,至多实现了一些常用协议(如HTTP)的扩展接口,对于数据的处理(如协议解析、粘包、数据缓存)都需要上层自己实现。BillingNTC支持了以下的能力:  (1)支持跨平台(WIN32,LINUX,AIX,HPUX,SOLARIS,FREEBSD/MACOS)。  (2)支持同步和异步模型的网络编程。  (3)支持按协议适配拼接消息,缓存复用,并解决粘包问题。  (4)支持同一端口,多种协议混合的解决方案。  (5)支持事件扩展,动态增加事件泵,自定义事件分发和处理动作。  (6)支持流量统计和流量控制。  (7)支持链路超时控制。  (8)支持4类协议原型,以及扩展的HTTP协议和WIN-NTCP协议。  (9)支持连接代理设置。  2BillingNTC设计  2.1IO多路复用  IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。  2.2IO事件分离  一般地I/O多路复用机制都依赖于一个事件多路分离器(EventDemultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(EventHandler)。两个与事件分离器有关的模式是Reactor和Proactor。Re-actor模式采用同步IO,而Proactor采用异步IO。在Reactor中,事件分离器负责等待文件描述符或Socket为读写操作准备就绪,然后将就绪事件传递给对应的处理器,最后由处理器负责完成实际的读写工作。  而在Proactor模式中,处理器--或者兼任处理器的事件分离器,只负责发起异步读写操作。IO操作本身由操作系统来完成。传递给操作系统的参数需要包括用户定义的数据缓冲区地址和数据大小,操作系统才能从中得到写出操作所需数据,或写入从Socket读到的数据。事件分离器捕获IO操作完成事件,然后将事件传递给对应处理器。比如,在Windows上,处理器发起一个异步IO操作,再由事件分离器等待IOComple-tion事件。典型的异步模式实现,都建立在操作系统支持异步API的基础之上,这种实现被称为“系统级”异步或“真”异步,因为应用程序完全依赖操作系统执行真正的IO工作。  2.3事件驱动模型  对于事件驱动模型,接触最多的便是界面的UI编程,它们都有一个事件队列,线程便是从事件队列中获取事件,然后执行事件对应的处理函数,周而复始地循环。事件驱动模型着重于弹性以及异步化,使得编程更为灵活。  在BillingNTC中,需要这样几个构件(前摄器,事件分发器,事件泵,事件处理器)来完成事件的流转,如图1所示。  2.3.1前摄器  前摄器(Proactor)是一个负责摄取事件,并将事件分发到事件泵的事件队列中。而连接前摄器便是利用I/O复用监测多个IO上的事件,并进行分离IO事件,派发到上层模块。  (1)多路复用模型  实用的多路复用模型都是多路分离的(“select”/poll/epoll等),而且是非阻塞的。将常用的I/O复用进行封装,提供统一的接口,达到I/O事件前摄器的多样性。根据操作系统的不同,自动选择适合的I/O复用模型。  (2)异步IO  前摄器需要负责

文档评论(0)

ailuojue1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档