Socket服务器,同时有几千个连接,怎么轮训

山娃马小三儿 2010-12-10 09:32:47
一个socket服务器,同时有几千甚至上万个客户端与服务器连接,要求每个N秒(每个客户端的间隔不固定)向客户端发送一条命令,请问怎么轮训比较好。最常用的做法是把这些连接放到一个链表中,然后根据做一个定时器,每秒去轮询,如果到达时间点就发送,但是连接数太多话,延时会比较大吧,有什么更好的办法吗?
...全文
278 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
在水一方 2010-12-24
如果设置多线程处理,每个线程设置一个处理上限,会怎么样?
回复
fjw8205 2010-12-22
Hash表方式如何,检索的效果比单纯的List模式要好很多吧
回复
zzw820626 2010-12-18
消息模式
回复
xiaofang1861 2010-12-18
用完成端口吧!!
回复
imho888 2010-12-16


每个连接点主动判断是否有发送指令。
回复
whisht 2010-12-15
[Quote=引用 1 楼 lqfcu2 的回复:]
看下IOCP模型的代码吧。。。
[/Quote]
查一下完成端口原理
回复
mdm61 2010-12-15
我也想知道
回复
有人解答吗,怎么轮询??
回复
xiaocongzhi 2010-12-13
IOCP吧
回复
SQLDebug_Fan 2010-12-11
支持几千连接的一般都是自己写的IOCP模型,看看他封装的源代码中是否有管理SOCKET链接的地方。
回复
SQLDebug_Fan 2010-12-11
SOCKET都有维护列表的,逐一遍历就可以了。
回复
确实是使用的IOCP模型,初次使用,不知道理解的对不对,我觉得IOCP模型只是对于已经投递的待发送的和已经到达端口上的信息进行自动管理,但是对于在把数据投递到完成端口之前的操作,没法进行自动管理吧,我现在想了解的就是用什么方法可以对连接数很多的服务端程序如何进行投递前的轮询管理
回复
sanguomi 2010-12-10
遍历肯定是要的,无非把遍历效率弄高点
另外把无效的SOCKET从链表中剔除掉
回复
lqfcu2 2010-12-10
看下IOCP模型的代码吧。。。
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1565

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告