较大的应用程序如何处理潜在的(Web)套接字端口冲突?

时间:2017-08-17 13:29:42

标签: python sockets networking websocket

我正在编写chrome插件和桌面应用程序之间的websocket连接,这些应用程序在本地专门互相交流。我知道你不能在同一个端口上监听两个套接字(这对所有端口都是如此吗?)

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

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

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

  1. 记录问题,让支持处理
  2. 让用户配置端口
  3. 但如果可能的话,我宁愿采用合理的技术方法来处理它。我可以想出一些算法来尝试一些预配置的端口,但我希望这是业内一个众所周知的问题,我希望了解这个问题的共识是什么。

    问题主要是技术不可知,但如果重要,我的堆栈是桌面端this websockets library的python,当然还有客户端的JavaScript。

2 个答案:

答案 0 :(得分:1)

我认为没有理由去思考它。一个看似非occupied后备端口的列表,最后是一个指定端口的提示应该没问题。如果双方都能够使用HDD IO(我不知道Chrome插件可以做多少),那么插件和应用程序就更容易满足。

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

如果要谈论大型网络,那么可以使用一类所谓的服务发现协议来帮助解决这类问题。基本上它们是基于IP或UDP的多播协议,其在网络上通告不同的服务。通常这些协议具有标准化的通信端口,因此不太可能被其他应用程序占用。例如DHCP,Bonjour。

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

答案 1 :(得分:0)

嗯,我不知道应用程序实际上有多大,但尝试找到一个免费端口可能会尝试吗?

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