WinSock重叠I/O问题

时间:2021-07-02 00:07:33
我要做大响应规模的Winsock应用程序,简单来说就是服务器端同时和300个或者更多的客户端聊天,这样要监控大量的Socket,因为要保持长连接。想用重叠I/O来做,但手头资料有限,弄得不是很清楚,那个老大有这方面的资料或者做过这方面请给小弟看看,主要是用什么API函数以及用法

5 个解决方案

#1


我做过, 还写过一套函数库. 用的是重叠I/O+完成例程(completion routine)+APC调用. 做过这么一套东西后感觉编程难度上比完成端口稍微简单点(完成端口控制工作线程间同步太麻烦了, 某个socket两次收到数据可能是从两个线程触发的, 解决不同socket之间的共享冲突太复杂了, 一不小心就死锁, 而且很难调试), 不过代码量比完成端口多, 因为要自己写线程池中线程的调度, 因为可以指定某个socket使用某个线程, 所以多线程冲突方面比较容易避免.

#2


可否提供参考学习?
L27182818@Tom.com

#3


用Indy10都做好了。

#4


该回复被版主删除

#5


我想用WinSock API 来做

#1


我做过, 还写过一套函数库. 用的是重叠I/O+完成例程(completion routine)+APC调用. 做过这么一套东西后感觉编程难度上比完成端口稍微简单点(完成端口控制工作线程间同步太麻烦了, 某个socket两次收到数据可能是从两个线程触发的, 解决不同socket之间的共享冲突太复杂了, 一不小心就死锁, 而且很难调试), 不过代码量比完成端口多, 因为要自己写线程池中线程的调度, 因为可以指定某个socket使用某个线程, 所以多线程冲突方面比较容易避免.

#2


可否提供参考学习?
L27182818@Tom.com

#3


用Indy10都做好了。

#4


该回复被版主删除

#5


我想用WinSock API 来做