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

发布于 2024-08-11 04:12:17 字数 369 浏览 8 评论 0原文

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

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

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

I currently have a small Python script that I'm using to spawn multiple executables, (voice chat servers), and in the next version of the software, the servers have the ability to receive heartbeat signals on the UDP port. (There will be possibly thousands of servers on one machine, ranging from ports 7878 and up)

My problem is that these servers might (read: will) be running on the same machine as my Python script and I had planned on opening a UDP port, and just sending the heartbeat, waiting for the reply, and voila...I could restart servers when/if they weren't responding by killing the task and re-loading the server.

Problem is that I cannot open a UDP port that the server is already using. Is there a way around this? The project lead is implementing the heartbeat still, so I'm sure any suggestions in how the heartbeat system could be implemented would be welcome also. -- This is a pretty generic script though that might apply to other programs so my main focus is still communicating on that UDP port.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

楠木可依 2024-08-18 04:12:17

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

This isn't possible. What you'll have to do is have one UDP master program that handles all UDP communication over the one port, and communicates with your servers in another way (UDP on different ports, named pipes, ...)

兲鉂ぱ嘚淚 2024-08-18 04:12:17

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

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

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

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

尝试一下并告诉我们!

I'm pretty sure this is possible on Linux; I don't know about other UNIXes.

There are two ways to propagate a file descriptor from one process to another:

  • When a process fork()s, the child inherits all the file descriptors of the parent.
  • A process can send a file descriptor to another process over a "UNIX Domain Socket". See sendmsg() and recvmsg(). In Python, the _multiprocessing extension module will do this for you; see _multiprocessing.sendfd() and _multiprocessing.recvfd().

I haven't experimented with multiple processes listening on UDP sockets. But for TCP, on Linux, if multiple processes all listen on a single TCP socket, one of them will be randomly chosen when a connection comes in. So I suspect Linux does something sensible when multiple processes are all listening on the same UDP socket.

Try it and let us know!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文