当前位置: 代码迷 >> Java Web开发 >> 单个线程接收10W左右的socket如何避免
  详细解决方案

单个线程接收10W左右的socket如何避免

热度:219   发布时间:2016-04-16 21:58:37.0
单个线程接收10W左右的socket如何处理?
我做了一个测试,服务器用单个线程可以接收10W以上的socket,那么对于这些socket用轮询的方式处理,如果前面的socket没有处理好,后面的socket会处于什么状态?(等待处理么?)
------解决方案--------------------
引用:
我做了一个测试,服务器用单个线程可以接收10W以上的socket,那么对于这些socket用轮询的方式处理,如果前面的socket没有处理好,后面的socket会处于什么状态?(等待处理么?)


如果是TCP的话,会不断的堆在缓冲区里,只要socket 的缓冲区还有空间,相应socket 的发送方仍然可以发送数据。

但缓冲区满之后,后面的socket会处于阻塞状态,发送方不可以再发送数据。

如果缓冲区满之后,接收方的数据长期得不到处理(通常为120s),发送方就得不到window update,会引起TIMEOUT,然后会断开。

如果你做到单服务器10W的话,我猜你多数是linux的系统,你多找些unix/linux下面的socket开发的资料看看。

java的nio只是对这些东西封装而已。



  相关解决方案