Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一台Java服务器上处理超过一百万个并发客户端?_Java_Tcp_Nio_Scalability - Fatal编程技术网

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

如何在一台Java服务器上处理超过一百万个并发客户端?,java,tcp,nio,scalability,Java,Tcp,Nio,Scalability,我正在构建一个NIOJavaTCP服务器,它能够容纳多达一百万个并发客户端。不幸的是,它必须是TCP连接 实现这一目标的一些做法是什么?我的灵感来自Node.JS处理模型(我想还有经典的NIO方法):即一个事件循环线程和工作线程,用于卸载长时间运行的任务 我读过关于人们实现超过一百万个并发连接的文章。但是,如何使打开的套接字数量超过可用的端口数量?操作系统中打开文件的数量限制如何?一个端口上可以接受一个线程。线程池。计划一个请求(特别是在高负载时),或者立即将其传递给工作线程。或者按照前面的回答

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

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


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

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

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

或者在nio2中使用异步套接字,它可以为您完成以上所有工作


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

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

我闻到一个
关闭的主题太宽泛了
即将到来,至少除非你把你的问题缩小了很多。宽泛的主题关闭得太宽泛了(因此得名)。你不能在这里跳华尔兹然后说“嘿,我要建立一个百万用户的服务器,请告诉我怎么做”。看看什么样的问题好,什么样的问题结束。在重读这个问题时,我可以看到你在最后确实提出了适当的问题。对不起,我现在有点睡眠不足。“在这里跳华尔兹”——真的吗?我正在寻找开始的指针。我不知道这有什么不对。如果你不想提供建设性的帮助,请不要评论。“寻找指针”正是SO结构不太适合的地方。还有一个问题是,你没有问一个简单的、有限制的问题,而这些问题可以在一两段话中得到简洁的回答。如果您至少将不同方面划分为不同的问题,例如,一台机器可以有多少TCP连接(谷歌很容易做到这一点),并且在询问诸如打开文件之类的限制时,至少指定一个平台,那么您可能会得到更多更好的回答。我倾向于像现在这样“过于宽泛”地结束交易。我的行为正是基于@Durandal所说的。因此,这并不是一个开始的地方,这类问题通常都会被认为过于宽泛。人们在这里跳华尔兹,期望通过3段“问题”(通常是3行)他们可以得到一个答案库。当然,这可能会很烦人,但是如果你计划经常访问,你就必须学会忍受一定程度的烦扰。这会通过调整线程池大小来限制系统资源的使用。使用完客户端后关闭连接。关键是,你不可能真正地处理数百万个并发连接,你的目标是为数百万个并发客户端提供服务器,每个客户端每几秒钟发出一个请求。如果请求处理速度足够快,并且请求不太频繁,那么在线程池的每个线程中都会处理许多客户端。进行负载测试,JMeter左右。此外,还有(稍后)对多台服务器进行负载平衡的选项,这也是为了实现7x24可用性。