我正在构建一个能够容纳多达一百万个并发客户端的NIO Java TCP服务器。不幸的是,它必须是TCP连接。
实现这一目标有哪些实践?我从Node.JS处理模型中获取灵感(我认为,经典的NIO方法):即一个事件循环线程和工作线程,用于卸载长时间运行的任务。
我读过关于人们实现超过一百万个并发连接的人。但是,如何使开放套接字的数量超过可用端口的数量?那么操作系统中打开文件数量的限制呢?
答案 0 :(得分:2)
在一个端口上接受一个线程。线程池。安排请求(特别是在高负载时),或者立即将其传递给工作线程。
答案 1 :(得分:0)
通过维护连接列表并为线程池/执行程序中的传入数据和处理调用select(),可以手动执行上一个答案中所写的操作。
或者在nio2中使用异步套接字,它可以为您完成上述任务。
另一个选择是使用像Mina或Netty这样的高级框架,它可以添加可重用的处理程序等等。
答案 2 :(得分:0)
要回答您实际问过的唯一具体问题,接受的套接字数与可用端口数无关,因为它们共享同一个本地端口。