保持插座连接,数据频率不规则

2024-06-26 11:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个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上运行)而不阻塞时没有收到数据?在


Tags: 数据服务器dataget客户机ifresponsedef
1条回答
网友
1楼 · 发布于 2024-06-26 11:21:24

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

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

相关问题 更多 >