有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

tcp如何在一台Java服务器上处理超过一百万个并发客户端?

我正在构建一个NIOJavaTCP服务器,它能够容纳多达一百万个并发客户端。不幸的是,它必须是TCP连接

实现这一目标的一些做法是什么?我从节点中获得灵感。JS处理模型(我想还有经典的NIO方法):即一个事件循环线程和工作线程,用于卸载长时间运行的任务

我读过关于人们实现超过一百万个并发连接的文章。但是,如何使打开的socket数量超过可用的端口数量?操作系统中打开文件的数量限制如何


共 (3) 个答案

  1. # 1 楼答案

    要回答您实际提出的唯一一个具体问题,接受的套接字的数量与可用端口的数量无关,因为它们都共享同一个本地端口

  2. # 2 楼答案

    在一个端口上接受一个线程。线程池。可以计划一个请求(尤其是在高负载时),或者立即将其传递给工作线程

  3. # 3 楼答案

    或者像前面的回答中所写的那样手动执行,方法是维护连接列表,调用select()来处理传入的数据,并在线程池/执行器中进行处理

    或者在nio2中使用异步套接字,它可以为您实现上述所有功能

    另一种选择是使用高级框架,比如Mina或Netty,它添加了可重用的处理程序等等