0

我想创建一个 python 套接字(或 SocketServer),一旦连接到单个设备,它就会保持打开的连接,以便定期检查是否已发送任何数据。套接字只会监听一个连接。

例如:

def get_data(conn):
    response='back atcha'
    data = conn.recv(1024)
    print 'get_data:',data
    if data:
        conn.send(response)

s = open_socket()
conn, addr = s.accept()
while True:
    print 'running'
    time.sleep(1)
    get_data(conn)
    #do other stuff

一旦服务器套接字被绑定并且连接被接受,套接字在运行 .recv 时阻塞,直到连接的客户端发送一些数据或关闭它的套接字。由于我在等待不规则的数据(可能是几秒钟,也可能是一天),同时程序还需要执行其他任务,所以这种阻塞是个问题。

我不希望客户端关闭其套接字,因为它可能需要随时向(从)服务器发送(或接收)数据。是在单独的线程中运行它的唯一解决方案,还是有一种简单的方法来设置客户端/服务器套接字以永久保持连接(这安全吗?它将在 VLAN 上运行),而不是在没有阻塞时阻塞数据已收到?

4

1 回答 1

1

您正在寻找非阻塞 I/O,也称为异步 I/O。使用一个单独的线程来阻塞它是非常低效的,但它非常简单。

对于 Python 异步 I/O 框架,我强烈推荐Twisted。还可以查看标准库附带的asyncore 。

于 2013-03-13T19:57:45.727 回答