1 回答
TA贡献1995条经验 获得超2个赞
write_eof()
如果您想在每次请求后关闭套接字,则需要使用
缓冲的写入数据刷新后,关闭流的写入端。
您的代码稍加修改将如下所示:
async def handle_req(self, reader, writer):
await reader.readline()
writer.write(b"$3\r\nbaz\r\n")
await writer.drain()
writer.write_eof()
writer.close()
await writer.wait_closed()
通常,您不会在每次请求后关闭套接字。
以下示例仅用于说明目的,旨在表明套接字不需要关闭。当然,您总是会读取一行,然后根据 Redis 协议解释数据。我们知道这里发送了两个 GET 命令(每行 5 行,包含 2 个元素的数组的指示符,字符串的指示符,字符串值“GET”,以及字符串指示符和相应的值,即键)
async def handle_req(self, reader, writer):
print("start")
for i in range(0, 2):
for x in range(0, 5):
print(await reader.readline())
writer.write(b"$3\r\nbaz\r\n")
await writer.drain()
writer.write_eof()
writer.close()
await writer.wait_closed()
在客户端发送是这样完成的:
print(r.get("foo"))
print(r.get("bar"))
time.sleep(1)
最后一次time.sleep是为了确保客户端不会立即退出。
控制台上的输出是:
start
b'*2\r\n'
b'$3\r\n'
b'GET\r\n'
b'$3\r\n'
b'foo\r\n'
b'*2\r\n'
b'$3\r\n'
b'GET\r\n'
b'$3\r\n'
b'bar\r\n'
请注意,start仅输出一次,这表明我们可以处理多个请求,而不必立即关闭套接字。
添加回答
举报