多套接字监控

Posted

技术标签:

【中文标题】多套接字监控【英文标题】:Multiple socket monitoring 【发布时间】:2011-07-04 10:49:19 【问题描述】:

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

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

谢谢,

【问题讨论】:

如果您循环调用 select(rlist),当检测到套接字状态发生变化时,是什么阻止您调整 rlist? @jd:python 程序是单个进程。因此,如果它正在等待套接字客户端连接,它将阻塞。 可以在监听socket上选择。准备好后,调用 mySocket.accept()。 【参考方案1】:

在这种情况下,您可以使用 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()

【讨论】:

以上是关于多套接字监控的主要内容,如果未能解决你的问题,请参考以下文章

通过select监控多个描述符实现并发连接

c# 做视频监控软件。如何用套接字连接一个已知IP地址的摄像头呢?具体点。

Linux之网络管理网络监控工具

TCP 套接字可以注意到网络中断的异常吗?

linux套接字编程之多进程多线程练习

Linux篇第十九篇——网络套接字编程(TCP套接字的编写+多进程版本+多线程版本+线程池版本)