1006 连接异常关闭错误与 python 3.7 websockets

新手上路,请多包涵

我遇到了与 python websockets 这个 github 问题相同的问题: https ://github.com/aaugustin/websockets/issues/367

不过,建议的解决方案对我不起作用。我得到的错误是:

websockets.exceptions.ConnectionClosed: WebSocket connection is closed: code = 1006 (connection closed abnormally [internal]), 没有原因

这是我的代码:

 async def get_order_book(symbol):
    with open('test.csv', 'a+') as csvfile:
        csvw = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
        DT = Data(data=data, last_OB_id=ob_id, last_TR_id=tr_id, sz=10, csvw=csvw)

        while True:
            if not websocket.open:
                print('Reconnecting')
                websocket = await websockets.connect(ws_url)
            else:
                resp = await websocket.recv()
                update = ujson.loads(resp)
                DT.update_data(update)

async def get_order_books():
    r = requests.get(url='https://api.binance.com/api/v1/ticker/24hr')
    await asyncio.gather(*[get_order_book(data['symbol']) for data in r.json()])

if __name__ == '__main__':
    asyncio.run(get_order_books())

我一直在测试它的方法是关闭我的互联网连接,但在延迟十秒后它仍然返回 1006 错误。

我正在运行 Python 3.7 和 Websockets 7.0。

告诉我你的想法,谢谢!

原文由 Matthieu Gavaudan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

所以我找到了解决方案:

当连接关闭时,由于某种原因它会跳出 while 循环。所以为了保持 websocket 运行你必须包围

resp = await websocket.recv()

尝试…除了并有

print('Reconnecting')
websocket = await websockets.connect(ws_url)

在异常处理部分。

原文由 Matthieu Gavaudan 发布,翻译遵循 CC BY-SA 4.0 许可协议

我遇到了同样的问题。挖了一段时间后,我发现了多个版本的答案,告诉我重新连接,但我认为这不是一条合理的路线,所以我又挖了一些。

启用 DEBUG 级别日志记录我发现 python websockets 默认发送 ping 数据包,并且未能收到响应,连接超时。我不确定这是否符合标准,但至少 javascript websockets 与我的 python 脚本超时的服务器完全没问题。

解决方法很简单:向 connect 添加另一个 kw 参数:

 websockets.connect(uri, ping_interval=None)

相同的参数也适用于服务器端功能 serve

更多信息,请访问 https://websockets.readthedocs.io/en/stable/api.html

原文由 shiona 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题