我正在开发一个需要单个服务器和大量客户端的应用程序。我正在利用 Java 套接字编程 API 来完成这项任务。目前,我正在考虑重组我的应用程序的整个设计,因为我根本不认为它是以最有效的方式构建的,并且希望获得一些关于最佳路径的指导。
当前实施
我有一个ServerSocket
位于端口 5000 上,包含套接字的线程只是连续运行并接受任何连接。然后它启动一个新的服务器线程(基于可用端口的同步表)来处理与该客户端的通信,然后ServerSocket.accept()
再次阻塞。
从这个主线程产生的线程也包含一个ServerSocket
并被用作一次处理多个连接的一种方式。
现在,客户端线程简单地连接到端口 5000,接收下一个可用端口作为回复,然后断开与端口 5000 的连接(通过调用Socket.close()
),并重新连接到服务器表示可用的端口。
我的问题
这是在单个服务器上处理多个客户端的最佳方式(或者更好,甚至合理吗?)?或者我应该简单地ServerSocket
在所有可用端口上打开 's 并不断收听?也许是我还没有考虑过的事情?
附录
我试图从大型客户端-服务器应用程序(例如 MMORPG 或某些聊天应用程序)的角度来思考,以了解我的实现的可行性。例如,我试着问自己:“虽然这可能行得通,但如果这个应用程序有一个庞大的用户群,它会是一个好的解决方案吗?”。话虽如此,如果我能看到解决方案如何大规模地工作,比如数百万用户,我会更容易理解解决方案的最佳性质。