我做了一个测试,服务器用单个线程可以接收10W以上的socket,那么对于这些socket用轮询的方式处理,如果前面的socket没有处理好,后面的socket会处于什么状态?(等待处理么?)
------解决方案--------------------
如果是TCP的话,会不断的堆在缓冲区里,只要socket 的缓冲区还有空间,相应socket 的发送方仍然可以发送数据。
但缓冲区满之后,后面的socket会处于阻塞状态,发送方不可以再发送数据。
如果缓冲区满之后,接收方的数据长期得不到处理(通常为120s),发送方就得不到window update,会引起TIMEOUT,然后会断开。
如果你做到单服务器10W的话,我猜你多数是linux的系统,你多找些unix/linux下面的socket开发的资料看看。
java的nio只是对这些东西封装而已。