
WebSocket
wordsCount: 769
readingTime: 2 mins
viewers:
緣由
因寫side project重新接觸到WebSocket,順便理清以前模糊的概念
關於WebSocket Vs HTTP
一樣
- 都是應用層的協定
- 都是基於TCP的連線
- 都走在80/443 port
- 都有未加密版本ws:// http:// 和加密版本wss:// https://
不一樣
- WebSocket是雙向通訊(server可以主動向client),HTTP是單向通訊
- WebSocket是持久連線,HTTP是短暫連線
- WebSocket是基於事件(OnOpen,OnMsg),HTTP是基於請求
- WebSocket是基於frame,HTTP是基於request/response
解決什麼問題?
- HTTP協定是單向,如果server端有事件要通知前端,只能等client端不斷的輪詢server端
- 而WebSocket是雙向的,初步建立連線後,後續的溝通是即時且不用重建TCP連線
建立連線
雖然協議是ws://或wss://,但實際建立連線是基於HTTP升級,所以port才會跟http相同
Client端
- client溝通時握手階段一定是http get方法,header裡面會有一個Upgrade的欄位和相關資訊(套件實作會自動帶)
- 因為是雙向溝通,也要定義當server傳事件OnOpen,OnMsg,OnClose,OnError的處理方式
Server端
- server端啟動的時候,先啟動一個HTTP server,使用ws套件去定義當有ws請求時,對每種事件的處理方式OnOpen,OnMsg,OnClose,OnError
- 在特定路由get方法下,將HTTP請求轉換成ws請求,通常此時會將http get帶過來的身份驗證token內容放入ws內,提供後續OnOpen的使用
- 不管哪一個http路由升級成ws,在OnMsg的請求內是無法分辨從哪一個路由過來的,所以要自己去實作
- 因為是長連線,不用每個訊息都帶身份驗證
Table of Contents
Related Posts
優雅停止程式
緣由 因為工作加入新專案,看到對停止程式有專門做處理,才回頭思考自己對這部分的研究不足 關於OS訊號 通常
2025-5-11
Architecture_Patterns_With_Python基礎概念
Value Object 值物件 定義:單存資料,沒有特定身份,通常讓他不可變 兩個物件相等的條件是:所有值相等 python 實作方式 dataclass 例
2024-9-1
Process & Thread [一]
前言 之前在工作上,已經運用多線程,協程,但對於底層運行,還不到通透的地步,重新整理知識 基礎知識 Program 程式
2024-7-25
Process & Thread [二]
Python Global Interpreter Lock 一個GIL鎖,主要是在Cpython的解釋器上,在每個進程生成時,會有一個解釋器負責解釋 ,對
2024-7-25
PoEAA Layer分層
分層 在不管是軟體的開發或硬體架構,分層的作法到處都是,雖然分層讓層與層之間,多了一個轉換的動作, 但一
2024-6-9
Sponsor
Wechat
Alipay
