<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # WebSocket `Websocket` 其實是一個新協議,跟 `HTTP` 協議基本沒有關系,只是為了兼容現有瀏覽器的握手規范。由 `HTML5` 提出。 ## Websocket 實例 典型的 Websocket 握手(借用Wikipedia的)如下: #### 瀏覽器發送給服務器 ```javascript GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: http://example.com ``` - `Upgrade: websocket` 和 `Connection: Upgrade`,告訴 nginx、apache 等服務器,此次請求是 `websocket` 請求。 - `Sec-WebSocket-Key` 是一個 Base64 encode 的值,這個是瀏覽器隨機生成的,告訴服務器:泥煤,不要忽悠窩,我要驗證尼是不是真的是Websocket助理。 - `Sec_WebSocket-Protocol` 是一個用戶定義的字符串,用來區分相同 URL 下,不同的服務所需要的協議。簡單理解:今晚我要服務A,別搞錯啦~ - `Sec-WebSocket-Version` 是告訴服務器所使用的 `Websocket Draft` (協議版本) #### 服務器返回: ```javascript HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat ``` - 同樣,`Upgrade: websocket` 和 `Connection: Upgrade`,告訴瀏覽器成功切換協議為 `websocket`. - `Sec-WebSocket-Accept` 這個則是經過服務器確認,并且加密過后的 `Sec-WebSocket-Key`。 服務器:好啦好啦,知道啦,給你看我的ID CARD來證明行了吧。 - `Sec-WebSocket-Protocol` 則是表示最終使用的協議. (至此,http作用已經完成) ## WebSocket #### websocket 的創建 ```javascript var Socket = new WebSocket(url, [protocol] ); ``` > 以上代碼中的第一個參數 url, 指定連接的 URL。第二個參數 protocol 是可選的,指定了可接受的子協議。 #### websocktet 的狀態 `只讀屬性 readyState` 表示連接狀態,可以是以下值: |值 |表示的狀態 | |---|------------------| |0 |表示連接尚未建立。 | |1 |表示連接已建立,可以進行通信。| |2 |表示連接正在進行關閉。| |3 |表示連接已經關閉或者連接不能打開。| #### websocket 的事件 |事件 |事件處理程序 |描述 | |-------|-------------------|------------------| |open |Socket.onopen |連接建立時觸發 | |message|Socket.onmessage |客戶端接收服務端數據時觸發| |error |Socket.onerror |通信發生錯誤時觸發 | |close |Socket.onclose |連接關閉時觸發 | #### websocket 方法 |方法 |描述 | |---------------|------------------| |Socket.send() |使用連接發送數據 | |Socket.close() |關閉連接 | > 單個 TCP 連接上進行全雙工通訊的協議。 > 獲取 Web Socket 連接后,可以通過 send() 方法來向服務器發送數據,并通過 onmessage 事件來接收服務器返回的數據。 > 持久化 ### websocket 的實現 - python的一個開源項目 pywebsocket 可以實現簡單的 websocket 服務端。 - [WebSocket-Node](https://github.com/Worlize/WebSocket-Node) 實現 websocket 服務端,需要依賴于底層的C++,Python的環境,支持以node做客戶端的訪問。 - [faye-websocket-node](https://github.com/faye/faye-websocket-node) 實現 websocket 服務端,是faye軟件框架體系的一部分,安裝簡單,不需要其他依賴庫。 - [socket.io](https://github.com/LearnBoost/socket.io) 實現 websocket 服務端,功能強大,支持集成websocket服務器端和Express3框架與一身。 ## webSocket 如何兼容低瀏覽器 Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 編碼發送 XHR 、 基于長輪詢的 XHR。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看