管理Java服务器应用程序中的多个套接字连接

seb*_*ian 3 java sockets

在我们的新项目中,我们需要实现服务器应用程序.此服务器获取50,000(+)个客户端的连接请求.问题是这些连接必须保持开放并且必须在某处进行管理.该应用程序应该像电话交换机一样工作.因此,它可以获得连接客户端的请求,并且只有在它们也连接时才将它们连接到其他(可能是几个)客户端.使用专有协议.我的问题是:

如何(以及在​​何处)管理开放套接字?我应该把它们放在HashMap中吗?这听起来很好奇.但我没有这么多开放联系的经验.

是否有可用的框架支持此连接要求?

谢谢您的帮助!

Vin*_*lds 6

如何(以及在​​何处)管理开放套接字?我应该把它们放在HashMap中吗?

通常,每个套接字都由一个负责读取和写入套接字的线程管理.您还将拥有一个主线程,负责接收预定义网络接口和端口(使用ServerSocketAPI类)的所有连接请求,然后可以将实际处理工作移交给工作者/从属线程.在这种情况下,您应该查看工作线程的线程池,因为创建50k线程很可能会压倒您的操作系统和硬件.

此外,如果您确实在管理50k并发套接字,那么强烈建议在Java的普通IO API上使用NIO API(java.nio.*),尽管我没有看到太多需要超过2-5k并发连接的项目.Java世界中至少有两个基于NIO的已知框架--Amaam MINAJBoss Netty.但是,在开始使用NIO API或NIO框架之前,我建议您阅读编写良好的NIO教程.