java – 使用websockets进行多线程处理

这更像是一个设计问题.我有以下实现

多个客户端连接—–>服务器——>相应的DB conns

客户端/服务器通信使用Web套接字完成.它目前是一个单线程应用程序.显然,这种设计不会扩展,因为服务器上的负载太高,并且响应客户端的响应时间太长.
后端操作涉及处理大量数据.

我的问题:为每个Web套接字连接创建一个新线程是个好主意吗?这意味着500个客户端有500个线程(无论是多线程还是单线程,Web套接字的数量都是相同的).这样可以减轻服务器的负担,从而使生活更轻松.

要么

是否有更好的逻辑来实现可扩展性?其中一个可以根据作业的优点创建线程,并由主线程处理其余部分.这在某种程度上似乎将来会再次回到同样的问题.

这里的任何帮助将不胜感激.

最佳答案
这种问题有两种方法

>每个请求一个线程
>固定数量的线程来管理所有请求

实际上你正在使用第二种方法,但只使用1个线程.

您可以使用线程池来改进它,以处理您的请求,而不是只有一个.

用于第二种方法的线程数取决于您的应用程序.如果您强烈使用cpu和一定数量的长I / O操作(读取或写入磁盘或网络),则可以增加此数量.

如果没有I / O操作,则线程数应该更接近cpu核的数量.

注意:现有Web服务器对http请求使用这两种方法.就像一个例子,Apache使用第一个(一个请求的一个线程)和NodeJ使用第二个(它是事件驱动的).

在任何情况下,使用超时系统在服务器崩溃之前解锁非​​常长的请求.

转载注明原文:java – 使用websockets进行多线程处理 - 代码日志