為什么需要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()