如果有一万个客户端,但是发送频率大概只是每分钟一次(每次也不耗时),一个服务器撑得住吗。而且每个线程也要占用一定量内存,不知道内存要不要考虑?

解决方案 »

  1.   

    你这种需要,只要系统允许你开这么多套接字(不要出现too many file descriptors),就是没问题的,效率没什么损失。但如果客户端有时间对齐,都在一个时间发送数据,则流量也不小。
      

  2.   

    TCP是面向连接的,如果需要1W的客户端,服务器端肯定需要1W的线程来读客户端发来的信息啊,虽然大部分时间是阻塞的。
      

  3.   

    不管是tcp还是udp,连接数量1w不算是很多。
    线程数量根据cpu数量或者核数确定,大概2*cpu+2左右。
    连接可以同时保持,但线程对数据处理是分时的,不能保证完全并行。
    lz这种需求,是常用的网络游戏服务端设计,使用完成端口机制完全可以处理。具体参考可以百度或者找些网络游戏服务端编程类书看看就知道了。
      

  4.   

    UDP没有连接的概念的。而且看过很多TCP服务器程序,都是while中accept监听传入的连接请求,然后开启一个线程,在这个线程里处理socket的读取和写入操作。如果线程数不等于连接数,如何响应客户端呢?
      

  5.   

    用完成端口是可以的,2~4个线程就够用了。阻塞,每个线程一个socket,天啦,太可怕了。
      

  6.   

    如果是TCP常链接则需要维护1W个线程,若不想起1W个线程可以改用短连接或UDP的方式这样可以减少系统对线程的维护。
      

  7.   

    线程多的话线程间的切换也是耗时的,而且每开启一个线程会占用一定量的内存空间。貌似线程一般和CPU核数有关系,太多没意义。
    如果要用一条线程处理一万个连接,貌似就不能用socket,socketserver的inputstream等阻塞方法了。
      

  8.   

    我知道了,这种情况像http用短连接就行,每次操作创建一次连接就行。
      

  9.   

    用UDP,自己加检验应答。