使用Winsock Non-block模式的时候,我们有多少种方法进行异步接收?总共4种!
1. 使用WSAAsyncSelect:
使用该方法可以指定两种模式,一种是事件通知,另外一种是窗口通知。就是有数据的时候通知上层进行接收。这个是在Windows上面使用最多的。
2. 创建线程使用select模式:
这个方法的好处是标准接口,基本在系统之间不需要怎么移植,但是实际使用起来还是有点麻烦的,而且在Windows上面是效率最低的一种。
3. 使用完成端口:
完成端口是效率最高的一种方式,可以省掉很多内存拷贝。因为WIndows的协议栈里面分了很多层,要一层层的拷贝数据,如果使用完成端口就可以省略了。完成端口的原理是,用户传一个指针下去,然后等缓冲里面被写满了数据后通过event通知。这个方法其实实现起来的代码也很精炼哦!98不支持完成端口。
4. 使用Overlap的模式,就是WSARecv最后的OVERLAP参数传一个EVENT进去,等数据填满之后会触发EVENT;可惜的是这个方法内存还是会一层一层拷贝的。效率不算最高,代码写法和完成端口类似。
本文详细介绍了在Winsock Non-block模式下进行异步接收的四种方法:使用WSAAsyncSelect、创建线程使用select模式、使用完成端口及使用Overlap模式。每种方法都附带了其优缺点说明,帮助开发者选择最适合自身需求的技术。
3469

被折叠的 条评论
为什么被折叠?



