提问人:user8901723980173 提问时间:11/22/2022 最后编辑:Mark Tolonenuser8901723980173 更新时间:11/23/2022 访问量:125
如何让TCP连接等待,直到上一个连接关闭,然后再开始新的连接
How to have a TCP connection await until previous connection is closed before starting a new one
问:
我正在使用 Python、套接字、选择器
我有一个列表,例如 [1,2,3,4,5]
我想打开一个连接,从列表中发送一个项目,关闭连接,然后对列表中的下一个项目重复。
打开连接的方法:
def start_connections(connid, current_message):
server_addr = (host, port)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(False)
sock.connect_ex(server_addr)
events = selectors.EVENT_READ | selectors.EVENT_WRITE
data = types.SimpleNamespace(
connid=connid,
recv_total=0,
messages=current_message,
outb=b"",
)
sel.register(sock, events, data=data)
这是用于确定要启动的连接量的方法:
def number_of_connections(num_conns):
for i in range(0, num_conns):
connid = i + 1
current_message = messages[i]
start_connections(connid, current_message)
events = sel.select(timeout=1)
if events:
for key, mask in events:
service_connection(key, mask)
我相信这是我需要实现某种类型的异步/await功能的方法,但我不确定这是否是正确的方法
作为参考,这是读取和写入服务器的方法,目的是在服务器写回客户端时关闭连接
def service_connection(key, mask):
sock = key.fileobj
data = key.data
while True:
if mask & selectors.EVENT_READ:
recv_data = sock.recv(1024) # Should be ready to read
if recv_data:
data.recv_total += len(recv_data)
if not recv_data or data.recv_total == 24:
sel.unregister(sock)
sock.close()
break
if mask & selectors.EVENT_WRITE:
if not data.outb and data.messages:
data.outb = data.messages
if data.outb:
sent = sock.send(data.outb)
data.outb = data.outb[sent:]
总而言之,我想打开x个连接,当服务器在该连接上写回客户端时,每个连接都会关闭。我一直遇到的主要问题是程序将立即启动所有连接,做一些工作,然后关闭所有连接。在尝试解决这个问题之后,我目前遇到的问题是有方法等待直到方法完成。number_of_connection
service_connection
答: 暂无答案
评论
service_connection