在我们的新项目中,我们需要实现一个服务器应用程序。此服务器获取50,000(+)个客户端的连接请求。问题是这些连接必须保持开放并且必须在某处进行管理。该应用程序应该像电话交换机一样工作。因此,它可以获得连接客户端的请求,并且只有在它们也连接时才将它们连接到其他(可能是几个)客户端。使用专有协议。我的问题是:
如何(以及在何处)管理开放套接字?我应该把它们放在HashMap中吗?这听起来很好奇。但我没有这么多开放联系的经验。
是否有可用的框架支持此连接要求?
感谢您的帮助!
答案 0 :(得分:6)
如何(以及在何处)管理开放套接字?我应该把它们放在HashMap中吗?
通常,每个套接字都将由一个负责读取和写入套接字的线程管理。您还将拥有一个主线程,负责在预定义的网络接口上接收所有连接请求。 port(使用ServerSocket
API类),然后可以将实际处理工作移交给工作者/从属线程。在这种情况下,您应该查看工作线程的线程池,因为创建50k线程很可能会压倒您的操作系统和硬件。
另外,如果您确实管理了50k并发套接字,强烈建议使用NIO API(java.nio。*)而不是Java的普通IO API,尽管我没有看到太多需要超过2-5k的项目并发连接。 Java世界中至少有两个基于NIO的已知框架 - Apache MINA和JBoss Netty。但是,在开始使用NIO API或NIO框架之前,我建议您阅读well written NIO tutorial。