多套接字监控
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()
【讨论】:
以上是关于多套接字监控的主要内容,如果未能解决你的问题,请参考以下文章