0

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

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

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

4

2 回答 2

2

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

于 2009-11-12T15:26:37.593 回答
1

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

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

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

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

试试看,让我们知道!

于 2009-11-12T16:47:22.847 回答