2017-02-14 37 views
1

Python v3.5またはv3.6を使用すると、websocketクライアントはいくつかのwebsocketサーバに接続しても閉じられません。以下のサンプルコードは、wss://echo.websocket.orgに接続しても正しく動作するプロセスを示していますが、wss:/stream.pushbullet.comに接続すると切断できません。aiohttp websocketサーバに接続してもWebSocketが閉じない

誰に違いがあるのでしょうか?それはサーバと何か関係があり、それがどのように振る舞うか(あるいは誤った振る舞いをするかもしれない)ようには思えない。 aiohttpの

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は、これを修正しました。私はそれがバグだと仮定します。私はv1.2.0を使いました。

-Rob

1

ユーザーが既に質問に答えているが、私は、サーバーの問題は、同様aiohttp 2.0に普及し、まだ、ソケットを閉じていない発見しました。

これは多くの場合、これもサーバーの問題です!デバッグ後、一部のサーバはプロトコルに従ってSSL接続を閉じることはありません。このようなサーバーでは、通常、オブジェクトを作成中に次のパラメータを追加するとジョブが実行されます。

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-c​​an- i-do-代わりに)。 - [レビューから](/レビュー/低品質の投稿/ 16737768) – kdopen

関連する問題