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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM