Python Asyncio - Тестирование соединения? - PullRequest
0 голосов
/ 22 декабря 2018

Длинная история, я могу получить пример кода сервера эха и ответить на несколько клиентов одновременно.Я пытаюсь использовать одно из многочисленных расширений 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 \ nHost: 127.0.0.1:8888\r\nConnection: Upgrade \r \ nПрагма: без кэширования \ r \ nCache-Control: без кэширования \ r \ nПользователь-агент: Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 69.0.3497.100 Safari / 537.36\ r \ nОбновить: websocket \ r \ nПроисхождение: file: // \ r \ nSec-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 \ nSec-WebSocket-Extensions: permessage-deflate;client_max_window_bits \ r \ n \ r \ n 'from (' 127.0.0.1 ', 57046) Отправить:' GET / HTTP / 1.1 \ r \ nHost: 127.0.0.1:8888\r\nConnection: Upgrade \ r \ nПрагма: нет-cache \ r \ nCache-Control: no-cache \ r \ nПользователь-агент: Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 69.0.3497.100 Safari / 537.36 \ r \ nОбновить:websocket \ r \ nПроисхождение: file: // \ r \ nSec-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 \ nSec-WebSocket-Extensions: permessage-deflate;client_max_window_bits \ r \ n \ r \ n '

И расширение зависает.Я, очевидно, могу изменить ответ, но я не уверен, что я должен отправить обратно, чтобы вроде «подтвердить» соединение, а затем просто в идеале дождаться двухсторонней связи send / recv.

1 Ответ

0 голосов
/ 22 декабря 2018

Расширение браузера сообщает HTTP и ожидает получить правильный HTTP-ответ, а не свой собственный запрос, повторно обработанный.По крайней мере, ответ должен начинаться с HTTP/1.1 200 Ok на отдельной строке, за которой следуют значимые заголовки и тело.

Если вам нужно обслуживать HTTP, посмотрите библиотеки, посвященные этому, такие как aiohttp .

...