用python实现websocket请求遇到的问题及解决方法。

想要实现python的ws库功能,实时获取对方服务器ws协议返回的数据,查了下百度,用如下流程:

    ws = create_connection("wss://ws.xxxxxxx.info/inv")
    ws.send(str({"op":"unconfirmed_sub"}))
    print("Receiving...")
    result =  ws.recv()
    print(str(result))

 看文档需要发送一个指令,用  str({"op":"unconfirmed_sub"}),发现无回显。经过大牛提示,不能用str方法,用json.dumps()方法。

加载json库   import json

ws = create_connection("wss://ws.xxxxxxx.info/inv")
ws.send(json.dumps({"op":"unconfirmed_sub"}))
print("Receiving...")
result =  ws.recv()
print(str(result))

 ok,收到单条消息。假如要循环接受呢?简单

while(1):
    result = ws.recv()
    print(str(result))

 

但是,运行一段时间出现 连接中断,需要重连,重连后漏掉许多数据,很是烦恼。网上查找没有明确的解决方式,试着竟然找到一个解决方式。

websocket.enableTrace(True)
ws = websocket.WebSocketApp(
        "wss://ws.xxxxxx.info/inv",
        on_message = on_message,
        on_error = on_error,
        on_close = on_close
    )
ws.on_open = on_open
ws.run_forever()

 python的仿js  websocket写法方式,重新写了一遍脚本,流畅接受消息,自动重连发送指令,连接时间明显减少,基本做到无遗漏数据,与网站js的ws连接实现一样。

posted @ 2018-04-13 21:09  elliottc  阅读(18046)  评论(1编辑  收藏  举报