看到下面有几个帖是说多客户端的实现,但是那里所谓多客户端还好,今天老师要我找完全模式的socket编程,客户端数量在6万(超过32位的端口数),请问高手如何实现

解决方案 »

  1.   

    http://msdn2.microsoft.com/en-us/library/aa365198.aspx
      

  2.   

    很多种模式都能支持到,我想到的问题是,你的老师怎样帮你测试是不是能稳定处理60000个客户端?不要告诉我只是发6W个连接上来,每个连接发ABC到服务器,然后服务器又返回个ABC的echo服务器?如果真是的话,windows核心编程那本书就有你要的程序的源代码了.
      

  3.   

    Thank You ,我是教育网所以国外站对我来说在搜索范围外了,谢谢提醒
    还有就是老师给的题目就是这样,至于测试吗我就不知道了
      

  4.   


    一个服务器的能承载的客户端数量与端口号无关。在Win32平台当中会有一个核心内存限制。除非系统当中应用程序和服务的布署非常简单,否则当你接受了6万个连接之后,系统会变得非常缓慢。
      

  5.   

    完成端口
    CreateIoCompletionPort
      

  6.   

    诶? 完成端口不是 OverLapped么?
      

  7.   

    Overlapped和完成端口,有一定概念上的区别,完成端口依赖于Overlapped,或者可以说是Overlapped之上的一个对大量并发性I/O管理的一个模式上的扩充。
      

  8.   

    可以参考一下Windows Platform SDK.
      

  9.   

    客户端数量6万个并不是意味着同时和服务器连接就是6万个,而是说明了其并发访问程度是比较高的,另外,一台服务器也不可能同时支持6万个TCP的连接,socket的端口最大也就是65536,所以最大就是6万多个同时TCP连接,而windows系统在超过几千个tcp连接后就会开始拒绝新的连接产生。其他系统也最多可能1到2万个同时TCP连接。
    另外,完成端口的编程可以看一下MSDN的相关文档。关键是如何投递一个完成端口的请求,如何在请求完成时候进行相应的处理。完成端口其实是一种控制翻转的一种模式,理解的这种编程的模式,使用完成端口进行编程不是什么大的难题了。
      

  10.   

    做为服务器,连接数量与端口的限制无关,同一个List Socket上产生的连接占用的是同一个端口号。
      

  11.   

    曾经做过一个测试,在Win32平台下同时接受了8万多个连接,几乎没有通讯能力,但是在6万多的时候,通迅仍然正常。8万这个数字是测试得到的数据,具体是不是对于断开的连接没有处理好,不是太清楚,但是从理论上来讲,一个运行专属服务的Win32系统,应该有240MB左右的核心内存(理论上限是256MB)可以供其使用,即使每一个连接占用4k(具体占用多少已经忘了,印象中应该低于这个值),那仍然能够有可以建立超过6万个连接资源。如果是64位平台,就没有了这个核心内存的限制,也就意味着只要有足够的内存资源,连接数可以远远地超过6万
      

  12.   

    中午测试发现,占用核心内存的主要是客户端(同机测试),发起六万多个连接(成功五万九千多个,服务器有心跳检测,但是客户端不发送数据,短时间内有部分就已经被断掉了)。极限是任务管理器显示核心内存占用259.xMB。如果客户端不影响服务器的断开,释放SOCKET,即便这近六万个连接服务器一一断开,核心内存的占用仍然存在。只有当客户端程序释放SOCKET才相应地释放资源。