首页 > 解决方案 > Java,如何管理线程来读取套接字(websocket)?

问题描述

我有一个 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) {}
}

标签: javamultithreadingsockets

解决方案


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

与此不同的是,普通 Web 服务器会运行最大数量的线程(例如,平均服务器上 100 个),它们按顺序处理传入的请求。


推荐阅读