一个socket服务器,同时有几千甚至上万个客户端与服务器连接,要求每个N秒(每个客户端的间隔不固定)向客户端发送一条命令,请问怎么轮训比较好。最常用的做法是把这些连接放到一个链表中,然后根据做一个定时器,每秒去轮询,如果到达时间点就发送,但是连接数太多话,延时会比较大吧,有什么更好的办法吗?

解决方案 »

  1.   

    遍历肯定是要的,无非把遍历效率弄高点
    另外把无效的SOCKET从链表中剔除掉 
      

  2.   

    SOCKET都有维护列表的,逐一遍历就可以了。
      

  3.   

    支持几千连接的一般都是自己写的IOCP模型,看看他封装的源代码中是否有管理SOCKET链接的地方。
      

  4.   

    确实是使用的IOCP模型,初次使用,不知道理解的对不对,我觉得IOCP模型只是对于已经投递的待发送的和已经到达端口上的信息进行自动管理,但是对于在把数据投递到完成端口之前的操作,没法进行自动管理吧,我现在想了解的就是用什么方法可以对连接数很多的服务端程序如何进行投递前的轮询管理
      

  5.   

    Hash表方式如何,检索的效果比单纯的List模式要好很多吧