Python访问WebSocket协议

为什么需要WebSocket协议?

众所周知,HTTP协议是一个遵循请求-响应模式的协议。这种模式有两个特点:

  1. 由客户端先发起请求,然后等待服务器的响应。
  2. 服务器不能在没有接收到客户端请求时,就发送数据。也就是说,客户端和服务器之间的通信是单向的。

在某些应用中,通常有服务器向客户端推送数据的需求,也就是需要客户端和服务器之间能够双向通信。而使用现有的HTTP协议不能很好地实现这个需求,于是HTTP协议的升级版-->WebSocket协议被发明出来。

协议概述

WebSocket协议包括两部分:握手和数据传输。握手时会使用HTTP协议,所以说它是HTTP协议的升级版。

安装模块

pip install websocket-client

访问WebSocket协议

from websocket import create_connection
import json

ws = create_connection("wss://xxx.com.com/")

ws.send(json.dumps({"class": "asfd","action": "asfd"}))
data = ws.recv()
print(type(data))
print(data)
ws.close()

重连问题

运行一段时间出现 连接中断,需要重连,重连后漏掉了许多数据。

import websocket
from threading import Thread
import time
import json


def on_message(ws, message):
    print("接收信息")
    print(message)


def on_error(ws, error):
    print("error", error)


def on_close(ws):
    print("关闭")


def on_open(ws):
    def run(*args):
        ws.send(json.dumps({"ddd": "xxx", "aa": "xxx"}))
        time.sleep(1)

        time.sleep(1)
        ws.close()

    Thread(target=run).start()


if __name__ == "__main__":
    websocket.enableTrace(False)
    host = "wss://xx.xxx.com/"
    ws = websocket.WebSocketApp(host,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)
    ws.on_open = on_open
    ws.run_forever()
原文地址:https://www.cnblogs.com/zhenzi0322/p/14362643.html