(1)websocket 協議 與 http協議javascript
websocket 協議,雙工通道 socket鏈接不斷開 http 協議 ,只能請求響應 (用戶主動獲取) socket鏈接斷開 都是基於socket ---- 客戶端都是瀏覽器
(2)輪詢java
通常用戶量少的 都是用 websocket來作即時通信 輪詢 --- 一直髮請求,定死的,2秒鐘取一次 長輪詢 --- 請求以後,沒有新消息,夯住,30秒以內沒有新消息,斷開 從新請求,若是有新消息,馬上返回消息
(3) ws 協議小例web
建立 socket 服務端 import socket sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) sock.bind(('127.0.0.1',8002)) sock.listen(5) conn,addr = sock.accept() data = conn.recv(1024) print(data) 建立 scoket 客戶端 <script type="text/javascript"> var socket = new WebSocket("ws://127.0.0.1:8002") // 瀏覽器 會當即建立一個 socket對象 ,鏈接 </script> </body> 可是服務端 必須返回固定格式的內容給瀏覽器 ,才能保證 正常的鏈接 【握手信息】魔法字符串
(5) WebSocket協議是基於TCP的一種新的協議。瀏覽器
WebSocket最初在HTML5規範中被引用爲TCP鏈接,做爲基於TCP的套接字API的佔位符。
它實現了瀏覽器與服務器全雙工(full-duplex)通訊。
其本質是保持TCP鏈接,在瀏覽器和服務端經過Socket進行通訊。服務器
請求和響應的【握手】信息須要遵循規則: 從請求【握手】信息中提取 Sec-WebSocket-Key 利用magic_string 和 Sec-WebSocket-Key 進行hmac1加密,再進行base64加密 將加密結果響應給客戶端 注:magic string爲:258EAFA5-E914-47DA-95CA-C5AB0DC85B11
(6) tornado 實現 websocketwebsocket
Tornado是一個支持WebSocket的優秀框架,固然Tornado內部封裝功能更加完整。
(7)客戶端和服務端傳輸數據時,須要對數據進行【封包】和【解包】框架
客戶端的JavaScript類庫已經封裝【封包】和【解包】過程,但Socket服務端須要手動實現。 第一步:獲取客戶端發送的數據【解包】 Payload 第二步:向客戶端發送數據【封包】