多个程序使用相同的UDP端口?可能?

时间:2009-11-12 15:22:38

标签: python udp communication daemon ports

我目前有一个小的Python脚本,我用它来产生多个可执行文件(语音聊天服务器),在下一个版本的软件中,服务器能够在UDP端口上接收心跳信号。 (一台机器上可能有数千台服务器,从端口7878到更高)

我的问题是,这些服务器可能(读取:将)与我的Python脚本在同一台机器上运行,我计划打开UDP端口,只是发送心跳,等待回复,瞧.. 。如果他们没有响应,我可以通过终止任务并重新加载服务器来重启服务器。

问题是我无法打开服务器已在使用的UDP端口。有没有解决的办法?项目负责人仍在实施心跳,所以我确信任何有关心跳系统如何实施的建议也会受到欢迎。 - 这是一个非常通用的脚本,虽然可能适用于其他程序,所以我的主要焦点仍然是在UDP端口上进行通信。

2 个答案:

答案 0 :(得分:2)

这是不可能的。您需要做的是有一个UDP主程序,它通过一个端口处理所有UDP通信,并以另一种方式与您的服务器通信(不同端口上的UDP,命名管道......)

答案 1 :(得分:1)

我很确定这在Linux上是可行的;我不知道其他UNIX。

有两种方法可以将文件描述符从一个进程传播到另一个进程:

  • 当进程fork()s时,子进程继承父进程的所有文件描述符。
  • 进程可以通过“UNIX Domain Socket”将文件描述符发送到另一个进程。请参阅 sendmsg() recvmsg()。在Python中,_multiprocessing扩展模块将为您执行此操作;请参阅_multiprocessing.sendfd()_multiprocessing.recvfd()

我没有尝试过监听UDP套接字的多个进程。但对于TCP,在Linux上,如果多个进程都在单个TCP套接字上侦听,那么当连接进入时,其中一个进程将被随机选择。所以我怀疑当多个进程都是Linux时,Linux确实某些是明智的在同一个UDP套接字上侦听。

试试并告诉我们!