【发布时间】:2021-02-08 23:59:32
【问题描述】:
我正在尝试编写一个基于异步的服务器。问题是,它在第一次请求后停止响应。
我的代码基于this template for echo-server 和this method to pass parameters to coroutines。
class MsgHandler:
def __init__(self, mem):
# here (mem:dict) I store received metrics
self.mem = mem
async def handle(self, reader, writer):
#this coroutine handles requests
data = await reader.read(1024)
print('request:', data.decode('utf-8'))
# read_msg returns an answer based on the request received
# My server closes connection on every second request
# For the first one, everything works as intended,
# so I don't thik the problem is in read_msg()
response = read_msg(data.decode('utf-8'), self.mem)
print('response:', response)
writer.write(response.encode('utf-8'))
await writer.drain()
writer.close()
def run_server(host, port):
mem = {}
msg_handler = MsgHandler(mem)
loop = asyncio.get_event_loop()
coro = asyncio.start_server(msg_handler.handle, host, port, loop=loop)
server = loop.run_until_complete(coro)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
server.close()
loop.run_until_complete(server.wait_closed())
loop.close()
在客户端,我得到一个空响应或 ConnectionResetError(104,'Connection reset by peer')。
【问题讨论】:
-
无法重现。您能否分享您的响应示例,或使示例代码可运行和可重现?