websocket基本概念

(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
第二步:向客戶端發送數據【封包】
相關文章
相關標籤/搜索