netty如何处理同一个端口上来的多条不同协议的数据,不分端口的情况下。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了netty如何处理同一个端口上来的多条不同协议的数据,不分端口的情况下。相关的知识,希望对你有一定的参考价值。

参考技术A 65536 指的是端口数目 一台电脑只有 最多65536个端口。不能可能使用超过 65536 个端口的 。但是每个端口可比不是只能有一个连接的。
一个 jvm 上保持 10万 ~ 50万 的长连接 指的是连接数,这么多连接使用的一个或者几十个端口,而不是所有的端口。
web服务 用80端口 每秒几万人访问的时候,并不是没人一个端口而是大家公用一个80端口的。

更大的应用程序如何处理潜在的 (web)socket 端口冲突?

【中文标题】更大的应用程序如何处理潜在的 (web)socket 端口冲突?【英文标题】:How do bigger applications deal with potential (web)socket port ***es? 【发布时间】:2017-08-17 13:29:41 【问题描述】:

我正在编写一个 chrome 插件和一个桌面应用程序之间的 websocket 连接,它们在本地相互独占。我知道你不能让两个套接字监听同一个端口(所有端口都是这样吗?)

我的大多数用户不会发生端口冲突,但该应用程序将在几千台计算机上运行;我认为我可以合理地预期在极少数情况下会发生冲突,即另一个应用程序已经占用了端口。

更大的应用程序如何处理这个潜在问题?一般来说,我对网络和(网络)套接字编程相当不熟悉。

我想有一些像这样的非技术解决方法:

    记录好问题,让支持人员处理 让用户配置一个端口

但如果可能的话,我宁愿有一种可靠的技术方法来处理它。我可以想出一些算法来尝试一些预配置的端口,但我希望这是业内相当知名的问题,我希望了解这个问题的共识是什么。

这个问题主要与技术无关,但如果重要的话,我的堆栈是 python,在桌面端带有 this websockets library,当然在客户端是 JavaScript。

【问题讨论】:

【参考方案1】:

我认为没有理由过度考虑它。看似 unoccupied 后备端口的列表,最后提示指定端口应该没问题。如果双方都有HDD IO的能力(我不知道一个chrome插件能做多少),那么插件和app的见面就更容易了。

对于同一主机上的两个应用,您还可以添加一个额外的环回接口。 Example.

如果谈到大型网络,有一类所谓的服务发现协议可能有助于处理此类问题。基本上,它们是基于 IP 或 UDP 的多播协议,在网络上通告不同的服务。通常这些协议都有一个标准化的通信端口,因此不太可能被另一个应用程序占用。例如 DHCP、Bonjour。

但是,处理端口冲突并不是它们的主要功能。在大型网络中,机器应该受到某种控制,并且不应该有很多应用程序抓取随机端口。如果与第三方应用程序发生冲突,理想的解决方案是寻找允许手动设置端口的设置。

【讨论】:

我想最好的选择是使用定义两个或三个客户端和服务器都知道的任意开放端口。这很简单。如果无论如何都会发生端口冲突,我会让支持人员处理它。听起来不错:)【参考方案2】:

好吧,我不知道实际上有多大的应用程序可以做到这一点,但有一种方法可以尝试直到找到空闲端口?

found_port = False
ports = [port1, port2, port3 ....]
for port in ports
    try:
        mySocket.bind ( ( ip_address, port ) )
        found_port = True   
   except:
        pass
   if found_port:
       break

【讨论】:

这里有一些令人毛骨悚然的含义,客户端需要知道服务器端正在尝试侦听的套接字,对吗?我知道我对网络编程了解不多,所以我明确地试图避免自己找到这样的解决方案。 是的,谢谢 :)。为了说明这一点,我在答案中添加了一个 ports_list,客户端也可以尝试通过端口列表进行连接

以上是关于netty如何处理同一个端口上来的多条不同协议的数据,不分端口的情况下。的主要内容,如果未能解决你的问题,请参考以下文章

如何处理一个类的不同版本?

问题:nginx 如何处理301 ?

TCP传输面向字节流如何处理重传呢?

建站问题。服务器上运行了很多个站点,分别在不同的端口。如果想公用一个域名该如何处理。

EasyDSS出现重复推流以级直播状态混乱的情况如何处理?

跨域在Spring Boot中如何处理