是上千个GPRS终端,要实时在线。
看有关资料有五种类型的套接字I / O模型: s e l e c t(选择)、W S A A s y n c S e l e c t(异步选择)、W S A E v e n t S e l e c t(事件选择)、o v e r l a p p e d(重叠)以及completion port(完成端口)。
原来想选用WSAEventSelect方式,但好像一个工作者线程最多支持64个终端,假如想让这个模型同时管理不止6 4个套接字,必须创建额外的工作者线程,这样会不会增加编程的复杂度?完成端口模型编程的复杂度会比事件选择模型复杂多少?完成端口模型能不能支持UDP方式?如何支持?多谢

解决方案 »

  1.   

    completion port(完成端口)。
    可以支持udp
      

  2.   

    select也没啥问题。完成端口开发成本和周期稍高了些。还是select开发起来快些。
    BTW:UDP完全没必要用啥完成端口。
      

  3.   

    楼上各位:有哪位做过类似的连接上千个终端的实际项目?用的是哪种模型?能比较一下效率能相差多少么?
    To:sevencat(七猫) 你用Select模型做过连接这么多个终端的项目么?和完成端口模型效率能差多少?比方说完成端口能连接1000个终端的话Select能连接多少终端?
    多谢
      

  4.   

    其实关键不是在与用什么模式;而是在于你的设计。 
    举几个例子,我一个同事用delphi 的控件做的可以支持上千个Tcp
    另外一个同事用VC做的,估计是用W S A E v e n t S e l e c t ,也能支持900个
    但不知道什么原因上不了900,就卡这里了。用UDP你还要保证数据完整性,
    没有速度上要求的话,可以用这个,然后用普通的socket就可以了。如果想速度快点,就用TCP, 这个最好用完成,这样支持的连接数多些。开发难度也差不多吧。
    在速度上,不是我说反了, 原因在于确保UDP完整不丢数据。 
    我也是做gprs有关通信的;可以一起探讨探讨