长话拍摄,我可以运行示例echo服务器代码并立即响应多个客户端。我正在尝试使用众多Chrome扩展程序之一与服务器进行通信,但无济于事。
码:
import asyncio
async def handle_echo(reader, writer):
while True:
data = await reader.read(500)
if data:
print(data)
message = data.decode()
addr = writer.get_extra_info('peername')
print("Received %r from %r" % (message, addr))
print("Send: %r" % message)
writer.write(data)
await writer.drain()
loop = asyncio.get_event_loop()
coro = asyncio.start_server(handle_echo, '127.0.0.1', 8888, loop=loop)
server = loop.run_until_complete(coro)
通常,我的示例客户端只发送“b'Hello World”,它工作正常。并且回复得到了很好的回复。
当我尝试连接浏览器扩展时,它会转储:
收到'GET / HTTP / 1.1 \ r \ n主机:127.0.0.1:8888 \ r \ n连接:升级\ r \ nPragma:no-cache \ r \ nCache-Control:no-cache \ r \ nUser-Agent:Mozilla / 5.0(X11; Linux x86_64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 69.0.3497.100 Safari / 537.36 \ r \ n升级:websocket \ r \ nOrigin:file:// \ r \ nNSec-WebSocket-Version:13 \ r \ nAccept-Encoding:gzip,deflate,br \ r \ nAccept-Language:en-US,en; q = 0.9 \ r \ nSec-WebSocket-Key:SgWT / reHbAzxm4faPOq6VA == \ r \ n nSec-WebSocket-Extensions: permessage,放气; client_max_window_bits \ r \ n \ r \ n'来自('127.0.0.1',57046)发送:'GET / HTTP / 1.1 \ r \ n主机:127.0.0.1:8888 \ r \ n连接:升级\ r \ n \ nPragma:否-cache \ r \ nCache-Control:no-cache \ r \ nUser-Agent:Mozilla / 5.0(X11; Linux x86_64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 69.0.3497.100 Safari / 537.36 \ r \ n升级: websocket \ r \ nOrigin:file:// \ r \ nSec-WebSocket-Version:13 \ r \ nAccept-Encoding:gzip,deflate,br \ r \ nAccept-Language:en-US,en; q = 0.9 \ r \ n \ nSec-WebSocket-Key:SgWT / reHbAzxm4faPOq6VA == \ r \ nSec-WebSocket-Extensions:permessage-deflate; client_max_window_bits \ r \ n \ r \ n”
扩展程序挂起。我显然可以改变响应,但是我不确定我应该发回什么样的“ack”连接,然后理想情况下等待2路发送/接收通信。
浏览器扩展与HTTP进行通信,并期望接收正确的HTTP响应,而不是自己的请求。至少,响应应该从HTTP/1.1 200 Ok
开始,在它自己的一行,然后是有意义的标题和正文。
如果您需要提供HTTP服务,请查看专用于此的库,例如aiohttp。