2017-02-14 3 views
1

Использование клиентов Python v3.5 или v3.6 не подключается к интернет-серверам. В приведенном ниже примере показан процесс, который правильно работает при подключении к wss: //echo.websocket.org, но не отключается при подключении к wss: /stream.pushbullet.com.aiohttp Websocket не закрывается при подключении к некоторым серверам websocket

Может ли кто-нибудь увидеть, в чем разница? Едва ли кажется, что он должен иметь какое-либо отношение к серверу и как он ведет себя (или, возможно, неправильно).

import asyncio 
import aiohttp 

# Code: http://pastebin.com/G5sfpQG2 
# Closing the echo.websocket.org connection works as expected 
# Closing the stream.pushbullet.com connection hangs 

async def run(): 
    session = aiohttp.ClientSession() 
    API_KEY = "RrFnc1xaeQXnRrr2auoGA1e8pQ8MWmMF" # (OK to have here) 
    async with session.ws_connect('wss://stream.pushbullet.com/websocket/' + API_KEY) as ws: 
    # async with session.ws_connect("wss://echo.websocket.org") as ws: 
     ws.send_json({"hello": "world"}) 

     async def _timeout(): 
      await asyncio.sleep(2) 
      print('closing ... ', end="", flush=True) 
      await ws.close() 
      print('... closed. Should see "broke out of ..." messages next') 

     asyncio.get_event_loop().create_task(_timeout()) 

     async for ws_msg in ws: 
      print("ws_msg:", ws_msg) 

     print("broke out of async for loop") 
    print("broke out of async with") 
    session.close() 

loop = asyncio.get_event_loop() 
loop.run_until_complete(run()) 
print("goodbye") 

ответ

0

Вздох Версия 1.3.0 от aiohttp исправил. Я предполагаю, что это была ошибка. Я был на v1.2.0.

Роб

1

Пока пользователь уже ответил на этот вопрос, я нашел вопрос серверов не закрывает сокет, все еще превалирует на aiohttp 2,0 а.

Много раз это проблема с сервером! После отладки выясняется, что некоторые серверы не закрывают соединения ssl в соответствии с протоколом. Для таких серверов добавление следующих параметров при создании объекта connector обычно выполняет задание.

force_close=True, enable_cleanup_closed=True 

Добавление этой информации для пользователей, которые могут столкнуться с этой проблемой в 2.0.

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/16737768) – kdopen

Смежные вопросы