java - 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) {}
}
解决方案
你的概念是错误的。您不应该每隔几毫秒就启动一个新线程,因为这会大大降低您的系统速度。此外,您不能同时打开 100 万个连接。没有正常的操作系统会允许这样做。
与此不同的是,普通 Web 服务器会运行最大数量的线程(例如,平均服务器上 100 个),它们按顺序处理传入的请求。
推荐阅读
- exchangewebservices - Outlook 加载项无法获取“https://telemetryservice.firstpartyapps.oaspapps.com/telemetryservice/telemetryproxy.html”
- python - Pandas - 将来自多个文本文件的信息组合到单个数据框
- spring-boot - 更改 Webflux 在 Jetty 而不是 Netty 上运行后出现异常
- r - 使用 R 从存储库导入 .dat 文件
- kendo-grid - 如何在 kendo-grid 中加载数据后自动调整列大小
- java - 如何获取我刚刚插入数据库的自动生成的 ID (Java)
- python - Cannot install NumPy using pip and import it
- r - 在 R 的 grep 中使用正则表达式不匹配
- git - 显示 git 跟踪文件中相对于特定日期的总更改字数
- python - 所有 RGB 组合的列表(Python)