标签:
上一篇对socket进行了简单的封装,但是由于send和recv都是同步的,真正使用的时候一般都需要异步的,如果让应用层自己负责维护异步线程,那这个框架就不实用了,所以异步收发还是要有的。
不知道怎么说起,先占坑以后再慢慢说吧。
我的实现方法:
1、创建SendBuffer和RecvBuffer,包装发送和接收的消息。
2、使用循环队列创建发送队列和接收队列,异步调用只需要将消息加入队列。(循环队列的实现可以参考 http://www.cnblogs.com/wolfred7464/p/4337093.html)
3、创建发送线程和接收线程,用来处理队列中的消息。
4、断开连接时,先通知并等待发送和接收线程结束,然后关闭socket连接。
为什么使用循环队列,是考虑到减少内存频繁申请释放造成的内存碎片和效率问题,而且队列故意没有设计动态增长的功能(添加这个功能很简单,创建新节点,调用两次set_next连接进去就可以),定制socket框架肯定是为了适应具体项目的需要,具体项目socket缓冲队列的大小是应该提前估算好的,如果队列满,异步调用会返回一个错误码,这时候应该认为是断网了,或者程序有bug,而不应该让队列去动态增长。
最后附上代码的github链接,只是初步设计完成,功能还会继续完善。https://github.com/Anti-Magic/AsyncSocket
标签:
原文地址:http://www.cnblogs.com/wolfred7464/p/4840702.html