为什么需要WebSocket
协议?
众所周知,
HTTP
协议是一个遵循请求-响应模式的协议。这种模式有两个特点:
- 由客户端先发起请求,然后等待服务器的响应。
- 服务器不能在没有接收到客户端请求时,就发送数据。也就是说,客户端和服务器之间的通信是单向的。
在某些应用中,通常有服务器向客户端推送数据的需求,也就是需要客户端和服务器之间能够双向通信。而使用现有的
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()