Java套接字编程不适用于10,000个客户端

8 java sockets c10k

我可以创建多个线程来支持套接字编程中的多客户端功能; 这工作正常.但是如果要连接10,000个客户端,我的服务器就无法创建这么多线程.

如何管理线程以便我可以同时收听所有这些客户端?

此外,如果在这种情况下服务器想要向特定客户端发送内容,那么它怎么可能呢?

Chr*_*son 11

您应该研究Java的NIO("新I/O")库以进行非阻塞网络编程.NIO旨在精确解决您所面临的服务器可扩展性问题!


eri*_*son 7

Java中高度可扩展的套接字编程需要"新I/O"或NIO包中提供的可选择通道.通过使用非阻塞IO,单个线程可以为许多套接字提供服务,仅适用于那些准备就绪的套接字.

其中一个可扩展的开源NIO应用程序是Glassfish应用程序服务器的Grizzly组件.Jean-Francois Arcand撰写了许多关于他在该项目上的工作的内容丰富,深入的博客文章,并介绍了使用NIO编写此类软件时的许多微妙缺陷.

如果非阻塞IO的概念对您来说是新的,使用像Grizzly这样的现有软件,或至少使用它作为适应的起点,可能会非常有帮助.


Jul*_*ang 6

NIO的好处值得商榷.见保罗季马的博客文章在这里这里.


gri*_*eve 1

这不是一个简单的问题,但对于一个非常深入的(抱歉,不是在java中)答案请参见: http: //www.kegel.com/c10k.html


编辑

即使有了nio,这仍然是一个难题。即使您使用非阻塞套接字,10000 个连接也会对计算机造成巨大的资源负担。这就是大型网站拥有服务器场和负载平衡器的原因。