发一个异步TCP开发库,求批评,求指正,求BUG

时间:2021-08-27 00:58:38

经常在在用socket开发程序的时候会遇到很麻烦的事情,要处理网络异常,要实现异步提高性能,要处理粘包,分包,要分析处理协议,如果能够有一个如同java下的mina一样的开发库会很方便,所以写了这个东西,先在只实现了TCP协议,还很简陋,先在发出来在还能改正的时候求批评,求指正,免得以后不好调头。项目的地址在http://edas.codeplex.com/

因为很简单,就几个类所以就不装样子发类图了。基本原理是这样子的:

一个Acceptor类用来封装Socket的监听操作,这里我提供了同步和异步两种监听方式,据网上的达人说同步监听的成功率高且效率不会比异步的差,经过测试发现效率上确实如此,于是加上了同步的监听方式。

一个AsyncSocket类封装了Socket的异步操作方法和事件,包括发送和接收以及连接,为了实现收发异步,发送的时候是先发到发送队列中,这样子收发的线程就独立开了,各自处于不同的IOCP完成事件的线程中。在AsyncSocket的实例中可以插入处理器,而处理器对象是自嵌套的,可以由多个处理器对象行成一个处理器链,一层一层的处理数据,在这个层次上来解决粘包,分包的问题。

我自己实现了3个最基础的处理器,一个是握手处理器,用来处理握手信息,一个是通过分隔符分割数据包方式的处理器,最后一个是通过定义数据包结构的方式分割数据包的处理器,如果需要处理自己的协议,比如需要处理HTML协议,只需要自己实现IProcessor接口,并把这个处理器插入到TokenProcessor的对象中就可以了。

我在源码里实现了一个字符串行的Echo Server,连接后对其发送 \n结尾的字符串,服务器会把源串原封不动的发送回来。

发一个异步TCP开发库,求批评,求指正,求BUG