Aiohttp: 客户端的关闭连接半关闭,不允许响应。

创建于 2019-03-21  ·  3评论  ·  资料来源: aio-libs/aiohttp

长话短说

http客户端向aiohttp发送请求,并立即发送fin,以关闭其连接。 Aiohttp调用处理程序以生成响应,但关闭连接而不是发送连接。

根据协议,这是由于eol_received返回None引起的。 使此函数返回True,可以解决此问题。

我没有找到与此修复程序有关的任何问题,甚至在响应后完全关闭了连接。 但是我不是aiohttp的专家。

预期行为

aiohttp将响应发送到客户端,然后关闭连接。 client.py打印响应的标题。

实际行为

aiohttp关闭连接而不发送响应。 client.py只是打印:

收到b''

重现步骤

client.py(仅在成功时打印响应的标头,但足以完成此操作):
``
进口插座

主机='127.0.0.1'
端口= 8080
使用socket.socket(socket.AF_INET,socket.SOCK_STREAM)为s:
s.connect((主机,端口))
s.sendall(b'GET / HTTP / 0.9 \ r \ n \ r \ n')
s.shutdown(socket.SHUT_WR)
数据= s.recv(1025)
print('Received',repr(data))
``

server.py:
``
导入异步

从aiohttp导入网站

异步def句柄(请求):
print(“处理请求:{}”。format(request))
asyncio.sleep(0.1)#确保鳍出现。
返回web.Response(text =“ Hello”)

应用= web.Application()
app.add_routes([web.get('/',handle)])
web.run_app(app)
``
首先在同一台计算机上运行server.py,然后运行client.py。

您的环境

aiohttp作为服务器
aiohttp版本3.5.4
转载于Ubuntu和OSX。 Python 3.6.5。

最有用的评论

我遇到的实际客户端不是用python编写的,我只是写了该脚本,以便在接收前将repro脚本关闭一半。

虽然我付钱,但我还是错过了等待睡眠的时间。 但是这两个都是快速脚本,仅用于重现客户端半关闭后关闭服务器端的问题。

所有3条评论

GitMate.io认为最有可能帮助您的贡献者是@asvetlov。

可能相关的问题是https://github.com/aio-libs/aiohttp/issues/1814 (未收到pong时关闭网络套接字连接), https://github.com/aio-libs/aiohttp/issues/2849 (获取使用aiohttp客户端关闭了连接), https://github.com/aio-libs/aiohttp/issues/2595 (关闭客户端连接后服务器处理程序停止), https://github.com/aio-libs/aiohttp/issues/ 96 (如果未使用响应主体,则关闭连接。)和https://github.com/aio-libs/aiohttp/issues/691(Websockets在响应后会自动关闭)。

您位于client.py代码应该循环遍历recv直到什么都没收到? 它在这里的工作是这样的:

HOST = '127.0.0.1'
PORT = 8080
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'GET / HTTP/0.9\r\n\r\n')
    chunk = s.recv(1025)
    result = chunk
    s.shutdown(socket.SHUT_WR)

    while len(chunk) > 0:
        data = s.recv(1025)
        result += chunk

print('Received', repr(result))

除此之外,我认为您忘记了等待server.py文件中对asyncio.sleep(0.1)的调用。

我遇到的实际客户端不是用python编写的,我只是写了该脚本,以便在接收前将repro脚本关闭一半。

虽然我付钱,但我还是错过了等待睡眠的时间。 但是这两个都是快速脚本,仅用于重现客户端半关闭后关闭服务器端的问题。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

rubenvdham picture rubenvdham  ·  5评论

deckar01 picture deckar01  ·  4评论

asvetlov picture asvetlov  ·  4评论

AtomsForPeace picture AtomsForPeace  ·  5评论

zhmiao picture zhmiao  ·  3评论