Java,如何管理线程读取socket(websocket)?

2024-05-24

我有一个 WebSocket 服务器。

我的服务器创建一个新线程来处理新连接。该线程一直处于活动状态,直到 websocket 中断。

我的问题:对于 1_000_000 个连接,我需要 1_000_000 个线程。我如何通过一个线程处理多个 websocket?无需等待?

ServerSocket server;
private ExecutorService executor = new ThreadPoolExecutor(1_000_000 , 1_000_000 , 7, TimeUnit.SECONDS, queue, threadFactory);

try
{
    server = new ServerSocket(port); 
}
catch (IOException e) {}

while (true)
 {
    Socket client = null;

   try
   {
        client = server.accept();

        Runnable r = new Runnable()
        {
           run()
           {
              // this is simple, original is complete WebSocket imp
               client.getInputStream().read();
           }
        };

        executor.execute(r);
    }

 catch (IOException e) {}
}

你的观念是错误的。您不应该每隔几毫秒启动一个新线程,因为这会大大降低系统速度。此外,您不能同时打开 100 万个连接。任何正常的操作系统都不允许这样做。

相反,普通的 Web 服务器运行最大数量的线程(例如,平均服务器上有 100 个),这些线程顺序处理传入的请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java,如何管理线程读取socket(websocket)? 的相关文章

随机推荐