重叠I/O如何处理成千上万的SOCKET连接

yzhgr 2007-02-02 08:50:39
对于大量连接时是不是定义一个SOCKET数组,同时定义一个OVERLAPPED数组和事件数组,每连一个SOCKET就分配一个SOCKET,一个OVERLAPPED,和一个EVENT,而对于这些SOCKET的处理只要开一个独立的I/O线程就可以了吗?在一个线程里处理这么多的连接事件好象不是太合理吧?!那它的高性能怎么体现出来的呢?
不晓得我的理解是不是错了,请高人指点!
...全文
313 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzhgr 2007-02-02
  • 打赏
  • 举报
回复
谢谢楼上的回复!
尘雨 2007-02-02
  • 打赏
  • 举报
回复
一般规模的应用,通常监听套接字只有一个,只负责接受连接,分配一个套接字会一个客户端连接。其后在这个客户端套接字上进行数据的重叠IO,recv或者send,每一个Recv或者Send都要有对应的overlapped和event,所以事件数组的数量不一定和客户段套接字数字的数量相等,比如有10个客户端连接上来,就有10个客户端套接字对应,但是在每个邪套接字上可能会有多个IO,每个IO都将对应一个事件

在一个线程里处理多个客户段套接字的IO,可以一次性得投递多个客户端的IO,因为是非堵塞,并设置相对应的事件,然后再等待这个事件数组,就在这个线程里处理,或者新开线程来处理数据。

对于成千上万个客户端套接字上的IO,由于一次等待事件最大为64,所以高效率维护套接字数组和事件数组就成了一个瓶颈,当然可以新开线程来增加64个的限制,但是模型会变得复杂而难于处理。

这样的需求建议还是完成端口好一些
  • 打赏
  • 举报
回复
重叠IO无法处理这么大的访问量,WINDOW网络编程里面第八章讲得很清楚了.完成端口也随不了上万的访问吧?如果上万,估计要做分布式处理了.

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧