Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-为多个客户端制作聊天服务器-我需要多少线程?_Java_Multithreading_Tcp_Server_Chat - Fatal编程技术网

Java-为多个客户端制作聊天服务器-我需要多少线程?

Java-为多个客户端制作聊天服务器-我需要多少线程?,java,multithreading,tcp,server,chat,Java,Multithreading,Tcp,Server,Chat,所以我得到了一个学校的练习,我要用java制作一个聊天服务器。我已经用TCP做了,但我也可以用UDP做 我开始做一些线程实现,但现在我真的不确定应该如何实现它,以及要生成多少线程。 所以,这是我的方法: 服务器需要1个线程运行,1个线程接收消息,1个线程发送消息。此外,我为每个连接的客户端创建了一个线程,服务器将其放入ClientThread[],然后用于向每个客户端发送消息。总共有13个线程(最多10个客户端) 此外,我想每个本地客户机都需要一个本地线程来发送和接收消息 这是正确的方法吗?让服

所以我得到了一个学校的练习,我要用java制作一个聊天服务器。我已经用TCP做了,但我也可以用UDP做

我开始做一些线程实现,但现在我真的不确定应该如何实现它,以及要生成多少线程。 所以,这是我的方法:

服务器需要1个线程运行,1个线程接收消息,1个线程发送消息。此外,我为每个连接的客户端创建了一个线程,服务器将其放入ClientThread[],然后用于向每个客户端发送消息。总共有13个线程(最多10个客户端)

此外,我想每个本地客户机都需要一个本地线程来发送和接收消息

这是正确的方法吗?让服务器运行13个线程会有问题吗


提前谢谢

您的方法看起来很可靠,但您并不是真的想处理这么多客户端线程。你应该使用


在内存中存储已初始化线程的列表,只在启动时打开它们,在关闭时关闭它们。每当客户机/服务器需要发送消息时,您将使用一个线程,然后将其返回到池中(而不是关闭它)。你也可以配置一个按需增长的人才库

我投票决定以“基于意见”的方式关闭它,但你的方法似乎很好。谢谢:)我现在正在研究一下,这似乎是一个非常好的选择不知道你在说什么,但在服务器进程中为每个客户机设置一个线程的意义在于,每个线程都等待来自其客户机的传入消息。在客户端关闭连接之前,无法将其返回到池中。另一种选择是使用
java.nio.channels.Selector
等待来自任何客户端的传入消息,并通过将任务分配给池线程来处理每条消息。这将比每客户端线程体系结构更具可扩展性,但可能更难实现/理解。正确,但这只是个家庭作业。仅仅通过建议线程池,我就过度解决了这个问题,幸运的是Java已经将它们开箱即用。如果问题是针对C语言,我就不会提出这个问题