我正在编写chrome插件和桌面应用程序之间的websocket连接,这些应用程序在本地专门互相交流。我知道你不能在同一个端口上监听两个套接字(这对所有端口都是如此吗?)
我的大多数用户都不会发生端口冲突,但应用程序将在几千台计算机上运行;我想我可以合理地预期在极少数情况下会发生冲突,其他应用程序已经占据了端口。
更大的应用程序如何处理这个潜在的问题?我对网络和(网络)套接字编程一般都不太熟悉。
我想有一些像这样的非技术性解决方法:
但如果可能的话,我宁愿采用合理的技术方法来处理它。我可以想出一些算法来尝试一些预配置的端口,但我希望这是业内一个众所周知的问题,我希望了解这个问题的共识是什么。
问题主要是技术不可知,但如果重要,我的堆栈是桌面端this websockets library的python,当然还有客户端的JavaScript。
答案 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