【发布时间】:2020-08-29 06:42:45
【问题描述】:
我们正在设计一个 TCP 服务器来侦听/绑定到 Linux 中的数千个端口。
通过每个端口的每秒流量将非常少,因此我们专注于有效地从套接字中进行选择。
只需绑定到这些端口并在每个套接字上使用 poll 或 epoll 就可以了。但是,我们正在追求更加资源效率的设计,例如,精心设计一个可以处理数万个套接字的 IO 线程模型,同时又不消耗过多的 CPU。
欢迎提出任何建议!
PS:
- 我们正在使用 Java,而在这种情况下,Netty 似乎有点矫枉过正。有没有更适合的轻量级网络框架?
-
iptables不在桌面上,我们根本无法使用它。
【问题讨论】:
-
为什么要监听数千个端口?您是否真的在实施数千种不同的网络协议(HTTP、FTP、SMTP、SSH...)?
-
您需要首先查看可用的系统调用,例如 tomtzook 对
select的建议,以了解最适合您需求的钩子。 然后您可以找出通过 Java 与这些系统调用交互的正确方法(如果您需要的东西不可用,则可能自己使用 JNI 实现一些东西)。 -
整个想法是错误的:由于有这么多永久打开的套接字,系统将永久过载。每个投标将持有一个 inode,类似于打开的文件,每个操作系统都有限制和有限数量的同时打开的文件 (inode) medium.com/@muhammadtriwibowo/…
标签: java linux tcp network-programming