多套接字监控

发布于 2024-11-18 12:01:34 字数 242 浏览 3 评论 0原文

我正在设计一个 python 程序,它将通过套接字同时与另外两个进程通信。其中一个进程是一个 C 守护进程,因此该套接字将一直处于活动状态 - 没有问题。另一个进程是一个PHP 网页。所以该套接字并不是一直建立的。大多数时候,套接字在端口上进行侦听(listen())。

如果两个套接字始终处于活动状态,则可以使用简单的 select() 调用来监视来自两个套接字的输入。但在我的情况下,这是不可能的。我怎样才能轻松实现这一目标?

谢谢,

I'm designing a python program that'll talk to two other process at the same time through sockets. One of the process is a C daemon so this socket will be alive all the time - no problem there. The other process is a PHP web page. So that socket isn't established all the time. Most of the time, the socket is listen()ing on a port.

If both socket are alive all the time, a simple select() call can be used to monitor input from both. But in my situation, this is not possible. How can I achieve this easily?

Thanks,

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

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

发布评论

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

评论(1

此生挚爱伱 2024-11-25 12:01:34

在这种情况下,即使在仅具有阻塞套接字的单线程单进程程序中,您也可以使用 select()。以下是如何使用 select() 接受传入连接:

daemonSocket = socket.socket()
...
phpListenSocket = socket.socket()
phpListenSocket.bind(...)
phpListenSocket.listen(...)
phpSocket = None

while True:
    rlist = ...
    rready, wready, eready = select(rlist, [], [])
    if phpListenSocket in rready:
        phpSocket, remoteAddr = phpListenSocket.accept()

You can use select() in this case, even in a single-threaded single-process program with only blocking sockets. Here's how you would accept incoming connections with select():

daemonSocket = socket.socket()
...
phpListenSocket = socket.socket()
phpListenSocket.bind(...)
phpListenSocket.listen(...)
phpSocket = None

while True:
    rlist = ...
    rready, wready, eready = select(rlist, [], [])
    if phpListenSocket in rready:
        phpSocket, remoteAddr = phpListenSocket.accept()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文