与插槽上的客户端的高性能多线程

时间:2015-10-06 16:43:51

标签: java multithreading sockets serversocket

目前我有一个开发Java Texas Holdem应用程序的项目。当然,此应用程序基于客户端服务器套接字系统。我正在socketServer.accept()中保存所有加入的客户(我使用ArrayList方法获取)。目前,我为每个加入的客户端创建一个线程,永久检查客户端是否向服务器发送任何数据。我的同学告诉我,如果我创建一个大的线程,迭代整个客户端ArrayList并检查每个客户端inputstreamreader会更好。我应该相信他吗?

2 个答案:

答案 0 :(得分:1)

如果您的应用程序将拥有大量客户端,那么为每个套接字创建一个线程并不是一个好主意。

我建议您查看外部库以及它们如何处理它们的连接。示例:http://netty.io/https://mina.apache.org/

答案 1 :(得分:1)

这两种方法都不可行。每个连接有一个线程将很快耗尽任何加载系统中的资源。让一个线程在循环中ping所有连接会产生糟糕的性能。

正确的方法是在套接字上复用 - 拥有一个合理数量的线程(16,为什么不是),在这16个线程之间分配所有套接字,并使用select()变体在这些套接字上复用 - Java中提供的任何东西此