Mat*_*dan 5 python websocket python-3.x python-asyncio
我遇到了与此python websockets的github问题相同的问题:https : //github.com/aaugustin/websockets/issues/367
提议的解决方案对我不起作用。我得到的错误是:
websockets.exceptions.ConnectionClosed:WebSocket连接已关闭:代码= 1006(连接异常关闭[内部]),没有原因
这是我的代码:
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())
Run Code Online (Sandbox Code Playgroud)
我一直在测试它的方法是关闭我的互联网连接,但是经过十秒钟的延迟后,它仍然返回1006错误。
我正在运行Python 3.7和Websockets 7.0。
让我知道您的想法,谢谢!
小智 25
我遇到了同样的问题。挖了一段时间后,我发现了多个版本的答案,告诉我重新连接,但我认为这不是一条合理的路线,所以我又挖了一些。
启用调试级别日志记录我发现 python websockets 默认发送 ping 数据包,并且无法接收响应,连接超时。我不确定这是否符合标准,但至少 javascript websockets 对我的 python 脚本超时的服务器完全没问题。
解决方法很简单:添加另一个 kw 参数到connect:
websockets.connect(uri, ping_interval=None)
Run Code Online (Sandbox Code Playgroud)
同样的参数也适用于服务器端功能serve。
更多信息请访问https://websockets.readthedocs.io/en/stable/api.html
所以我找到了解决方案:
当连接关闭时,由于某种原因它会脱离 while 循环。因此,为了保持 websocket 运行,你必须包围
resp = await websocket.recv()
Run Code Online (Sandbox Code Playgroud)
尝试...除了并且有
print('Reconnecting')
websocket = await websockets.connect(ws_url)
Run Code Online (Sandbox Code Playgroud)
在异常处理部分。
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |