我可以创建多个线程来支持套接字编程中的多客户端功能; 这工作正常.但是如果要连接10,000个客户端,我的服务器就无法创建这么多线程.
如何管理线程以便我可以同时收听所有这些客户端?
此外,如果在这种情况下服务器想要向特定客户端发送内容,那么它怎么可能呢?
您应该研究Java的NIO("新I/O")库以进行非阻塞网络编程.NIO旨在精确解决您所面临的服务器可扩展性问题!
关于NIO的介绍性文章:使用Java NIO构建高度可扩展的服务器
摘自O'Reilly的Java NIO书
Java中高度可扩展的套接字编程需要"新I/O"或NIO包中提供的可选择通道.通过使用非阻塞IO,单个线程可以为许多套接字提供服务,仅适用于那些准备就绪的套接字.
其中一个可扩展的开源NIO应用程序是Glassfish应用程序服务器的Grizzly组件.Jean-Francois Arcand撰写了许多关于他在该项目上的工作的内容丰富,深入的博客文章,并介绍了使用NIO编写此类软件时的许多微妙缺陷.
如果非阻塞IO的概念对您来说是新的,使用像Grizzly这样的现有软件,或至少使用它作为适应的起点,可能会非常有帮助.
NIO的好处值得商榷.见保罗季马的博客文章在这里和这里.