java Netty NIO 如何突破 65536 个端口的限制?如何做到 10万~50万...
发布网友
发布时间:2022-04-23 07:38
我来回答
共7个回答
热心网友
时间:2022-04-13 05:43
首先说一下 服务器是只监听一个端口,所有的客户端连接,都是连接到服务器的同一个端口上的。也就是说服务器只是用了一个端口。就比如Http服务器。默认只用了80端口。
这是解答一些人的这个疑惑。
下面来回答你的问题
nio 在linux上使用的是epoll ,epoll支持在一个进程中打开的FD是操作系统最大文件句柄数,而不是你所说的16位short表示的文件句柄。 而 select模型 单进程打开的FD是受限的 select模型默认FD是1024 。操作系统最大文件句柄数跟内存有关,1GB内存的机器上,大概是10万个句柄左右。可以通过cat /proc/sys/fs/file-max 查看
这个可以在Netty权威指南第二版的第七页看到。
我ubuntu虚拟机,2G内存。结果是 200496
2019/05/09 修正一下上面让人误会的地方
“服务器是只监听一个端口” 这句话 请参照这一段的最后一行 “就比如Http服务器默认只用了80端口” 我这一段话里说的服务器并不是指服务器主机 硬件, 而是说 服务程序。 一个服务器主机操作系统上 可以运行很多服务程序, 而通常都会说 Netty服务器、Apache服务器、tomcat服务器、Mysql服务器 , 这里是指 Netty服务端 Apache服务端 tomcat服务端 Mysql服务端 。 再比如 一个游戏的登录服务器 没人会叫他 游戏Netty服务程序 或者Netty登录服务程序 , 而会称呼它是 Netty服务器或者登录服务器 或者xxx游戏登录服务器之类的。 只是依照行业术语来说的 被误会了很抱歉 这里解释一下 。
再次回答一下这个问题 Netty NIO不用突破65536个端口* 因为根本没有这个端口*问题 只有主动发起一个请求 才会占用一个本地端口 主动发起10个请求 会占用10个本地端口 我这里说的是长连接 Netty NIO是属于服务程序 他只需要监听一个端口 比如8000端口 这时候有10个客户端 连接到这个Netty服务器 都是10个客户端全都连接到服务器的8000端口 服务端只会占用8000端口这一个端口 所以不需要突破65536端口*
热心网友
时间:2022-04-13 07:01
NIO突破不了65535的端口数*,linux端口范围0--65535,一般用户1025 ~ 65535
server端最大tcp连接数,理论上是2的48次方。
一个端口最大连接数cat /proc/sys/fs/file-max查看
客户端连接上端口之后的处理,才是netty的内容。netty代码监听着某个端口。
长连接不是问题,可能你要考虑的是并发问题
热心网友
时间:2022-04-13 08:36
百年不遇的奇葩问题,连接数,跟端口有啥嘛关系,一个程序可以用多个端口,但绝对不会这么用,简直是浪费到极点,服务器端是使用了高可用方案才能做到10万~50万这么高的连接数。
热心网友
时间:2022-04-13 10:27
65536 指的是端口数目 一台电脑只有 最多65536个端口。不能可能使用超过 65536 个端口的 。但是每个端口可比不是只能有一个连接的。
一个 jvm 上保持 10万 ~ 50万 的长连接 指的是连接数,这么多连接使用的一个或者几十个端口,而不是所有的端口。
web服务 用80端口 每秒几万人访问的时候,并不是没人一个端口而是大家公用一个80端口的。追问兄弟,按您的解释,那就不是长连接服务了,我并不是在问 web 。感谢您的回答,不过有些跑题。而且一个电脑只有6万多个端口是谬论,我的提干里面已经有粗浅的阐述了。
热心网友
时间:2022-04-13 12:35
通道复用了解下
热心网友
时间:2022-04-13 15:00
不懂不要装懂 谁告诉你的 服务器只能监听一个端口 我觉得有些时候没有真正能明白 不要乱发言 这样会浪费别人的时间
热心网友
时间:2022-04-13 17:41
首先说一下 服务器是只监听一个端口