IOCP完成端口与长连接通讯
来源:互联网 发布:鲁班预算软件下载 编辑:程序博客网 时间:2024/04/28 14:23
最近在写一个通讯代理程序的时候使用了IOCP通讯模型,几年前也使用过IOCP,不过当时的程序是基于短连接的,而这次是长连接的,写这个程序的过程中我觉得主要有以下几点值得注意:
1、整个程序的架构:程序由一个Accept线程,n个工作者线程,1个线程池管理线程,n个业务处理线程构成。Accept线程接收客户端连接并投递WSARecv重叠操作,工作者线程中通过GetQueuedCompletionStatus阻塞收取数据,收取请求数据后将数据放入队列,然后再投递一个WSARecv重叠操作至GetQueuedCompletionStatus阻塞调用,如果是短连接的话,此处就不需要再投递WSARecv重叠操作了,直接调用GetQueuedCompletionStatus收取另一个客户端连接发送过来的数据就可以了。我刚开始也忽略了这一点,导致程序每次只能收取客户端的第一个请求,后面就再也收不到了。
2、可以利用WSARecv和recv结合来完成"包头+数据体"形式的请求包的收取,在我们的程序中,数据体的长度是由包头中的某个参数来指定的,而WSARecv是非阻塞调用的(容易导致包头和数据体被不同的工作者线程收取,重新组装请求很麻烦),在收取这样的请求包时很不方便,于是我先利用WSARecv来收取包头,然后再根据包头中指定的长度调用recv阻塞收取相应长度的数据体,这样虽然性能上带来了一些损失,不过因为组装请求包方面简单很多,耗用的资源更少,总体来看也是值得的。
3、以后再接着补充...
- IOCP完成端口与长连接通讯
- iocp完成端口与socket通讯
- IOCP完成端口通讯备忘
- Java与完成端口IOCP
- Java与完成端口IOCP
- 完成端口Iocp与Epoll的区别
- 完成端口(Iocp)。
- IOCP 完成端口
- iocp完成端口
- IOCP完成端口源代码
- IOCP完成端口详解
- IOCP--完成端口
- 完成端口(IOCP)--实例
- 完成端口IOCP详解
- 完成端口IOCP 流程
- 完成端口模型IOCP
- IOCP完成端口模型
- 完成端口详解【IOCP】
- 局域网交换技术
- .Net WinForm学习笔记
- Tao Story(一)
- 索爱P800/P802无法安装经过symbian signed的程序的解决办法
- 项目经验-李轶楠
- IOCP完成端口与长连接通讯
- 手机购物--说爱你是否容易
- 两个必须包含的头文件要检查一个同名的预处理器常量
- 项目经验- 孙磊
- 动态网站制作的资源
- 三层交换技术
- 构建嵌入式LINUX的NFS
- 徘徊在“民工”和“白领”之间的程序员
- 创新谈-孙磊