国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

??
1. WebSocket ?? ?? ??
2、HTML5 WebSockets API
1.WebSocket通信基礎(chǔ)知識
? ? ????? H5 ???? Html5? WebSocket ??

Html5? WebSocket ??

Feb 16, 2017 pm 02:29 PM

1. WebSocket ?? ?? ??

WebSocket? HTML5? ???? ??? ????? ?? ?? ??? ??? ?? ???? ?????. ws ?? wss ????? ???? ??? ?????-?? ??? ?? ?????.

WebSocket API??? ????? ??? ????? ??? ???? ????? ?? ??? ?? ??? ?????. ???? ? ???? ?? ??? ? ????.

???? ???? ???(???)? ???? ?? ?? ?????? ??(??) ??? ???? ????. ??? ????? ?? ?? ??(?: 1???)?? ??? HTTP ??? ?? ?? ??? ?????? ????? ?? ???? ???? ????. ? ???? HTTP ?? d ??? ????? ??? ????? ??? ??? ??? ??? ??? ??? ????. ??? HTTP ??? ??? ?? ?? ??? ??? ???? ?? ?? ? ????. ???? ?? ?????.

?? ??? ???? ?? ??? AJAX? ???? Comet???. ??? ? ??? ??? ??? ?????? ??? ??(reuqest)? ???? ???.

Html5? WebSocket ??

WebSocket API??? ????? ??? ????? ??? ???? ????? ?? ?? ?? ??? ?????. ???? ? ???? ?? ??? ? ????. ? WebSocket ??????? ???? ???? ???? ? ?? ?? ??? ?? ? ????.

1. ??

?? ???? ??? ?? ????. 2???

2. ?? ??

?????? ??? ??? ??? ???? ?? ? ??? ?????? ????? ???? ??? ? ????. ???? ??? ? ????. ? ???? ???? ???? ???? ?????.

WebSocket? Ajax(?? XHR) ???? ???? ????. Ajax ????? ?????? ??? ???? ?? WebSocket ??? ?????? ?? ??? ??? ??? ??? ? ?? ?????.
Ajax ??? ??? ?? ?? ???? ?? ??? ??? ??? ????. WebSocket? ??? ??? ?? ???? ????? ???? ???? ? ?????.

2. HTML5 WebSockets API

WebSocket ??

WebSocket? DOM? ?? ? ??? ?? ?????.

  • WebSocket(url) ???.

  • ReadyState. ?? ?? ???? ?? ?? CONNECTING(0), OPEN(1), CLOSED(3)? ? ????.

  • boolean send(DOMString ???)

  • ???? ??? WebSocket ??? ?? ? ?? ???? ? ?? close() ???? ??? ???

onopen, onmessage ? onclosee? ? ?? ??? ??? ?? open, message ? close? ? ?? WebSocket ???? ?? ????.

1. ???? ?? ??

???? ?? ??

rree

2. WebSocket ?? ?? ? ?? ??

?? ?? ?????? ????? ? WebSocket ????? ???? ????? ??? URL? ????? ?? ???. ws:// ? wss:// ???? ?? WebSocket ??? ?? WebSocket ??? ?????.

function loadDemo() {  
    if (window.WebSocket) {  
        //supported  
    } else {  
        // not supported  
    }  
}

WebSocket ??? ??? ? ? ??????? ??? ? ?? ????? ??? ? ????. WebSocket ???? ? ?? ????? ?????? ??? ??? ? ????.

url = "ws://localhost:8080/echo";  w = new WebSocket(url);

proto1? proto2? ?????? ?? ??? ??? ? ?? ? ???? ?? ???? ???? ???? ????? ?????. ??? ???? ?? ????? ?????.

w = new WebSocket(url, ["proto1", "proto2"]);

3. ??? ??? ??

WebSocket ?????? ??? ? ? ??? ????? ???? ?? ???? ??? ??? ????? ?? ???. WebSocket ??? ??? ???? ????? ???? ???? ?? ??? ?????.
WebSocket ???? open, close ? message? ?? ???? ????. onopen, onmessage ? onclose? ?? ?? ??? ? ??? ???? ? ???? ? ?? ??? ??????. ?? onerror? ??? ? ????. ?? ?? ?? ??? ?????.

onopen = function(e) {  
    //確定服務(wù)器選擇的協(xié)議  
    log(e.target.protocol);  
}

4. ??? ???

??? ?? ?? ?(?, onopen ??? onclose ??) send ???? ???? ???? ?? ? ????. ???? ??? ? close ???? ???? ??? ??? ?? ??, ?? ???? ?? ?? ??? ??? ?? ????.

w.onopen = function() {  
    log("open");  
    w.send("send message");  
}  
w.onmessage = function(e) {  
    log(e.data);  
}  
w.onclose = function(e) {  
    log("closed");  
}  
w.onerror = function(e) {  
    log("error");  
}

Send() ??? ???? ?? ?? ??? ??? ?? ???? ???? ??? ??? ? ????. bufferAmount ??? WebSocket?? ?????? ?? ????? ???? ?? ??? ?? ?????. ?? ??? ???? ? ?????.

w.send();

WebSocket API? ???? ??? ???? Blob ? ArrayBuffer ???? ??? ?????

document.getElementById("sendButton").onclick = function() {  
    if (w.bufferedAmount < bufferThreshold) {  
        w.send(document.getElementById("inputMessage").value);  
    }  
}

Constant-readyState ??

??? ??? WebSocket ?? ??? ???? ? ??? ? ?? ReadyState ?? ?.

ConstantValueDescription
CONNECTING0連接還沒開啟。
OPEN1連接已開啟并準(zhǔn)備好進(jìn)行通信。
CLOSING2連接正在關(guān)閉的過程中。
CLOSED3連接已經(jīng)關(guān)閉,或者連接無法建立。

3.實(shí)例

<!DOCTYPE html><html><head>
    <title>webSocket實(shí)例</title></head><body>
    <h2>webSocket實(shí)例</h2>
    <input type="text" id="text">
    <button type="" id="connect" onclick="connect()">建立連接</button>
    <button type="" id="send" onclick="send()">發(fā)送數(shù)據(jù)</button>
    <button type="" id="disconnect" onclick="disconnect()">斷開連接</button>
    <p id="message"></p>
    <script type="text/javascript">
        var socket;        var readyState = ["正在連接","已經(jīng)連接","正在斷開","已經(jīng)斷開"];        var message = document.getElementById(&#39;message&#39;);        function connect(){

            try{                var url = &#39;ws:localhost/test&#39;;
                socket = new webSocket(url);
                message.innerHTML += "<p>socket狀態(tài):" +readyState[socket.readyState]+"</p>";
                socket.onopen = function(){
                    message.innerHTML += "<p>socket狀態(tài):" +readyState[socket.readyState]+"</p>";
                }
                socket.onmessage = function(msg){
                    message.innerHTML += "<p>socket狀態(tài):" +readyState[socket.readyState]+&#39;<br>&#39;+ "接收數(shù)據(jù)" + msg.data +"</p>";
                }
                socket.onclose = function(){
                    message.innerHTML += "<p>socket狀態(tài):" +readyState[socket.readyState]+"</p>";
                }
            }catch(exception){                // socket.onerror  = function(){
                    message.innerHTML += "<p>發(fā)生錯(cuò)誤!"+"</p>";                // }
            }
        }        function send(){
            var text = document.getElementById(&#39;text&#39;).value;            try{
                socket.send(text);
                message.innerHTML += "<p>發(fā)送數(shù)據(jù):" + text +"</p>";
            }catch(exception){
                message.innerHTML += "<p>發(fā)送數(shù)據(jù)出錯(cuò)</p>";
            }
        }        function disconnect(){
            socket.close();
        }    </script></body></html>

1.WebSocket通信基礎(chǔ)知識

WebSocket是HTML5開始提供的一種瀏覽器與服務(wù)器間進(jìn)行全雙工通訊的網(wǎng)絡(luò)技術(shù)。 使用ws或wss協(xié)議,是下一代客戶端-服務(wù)器的異步通信方法。

在WebSocket API中,瀏覽器和服務(wù)器只需要要做一個(gè)握手的動作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。

現(xiàn)在,很多網(wǎng)站為了實(shí)現(xiàn)即時(shí)通訊(real-time),所用的技術(shù)都是輪詢(polling)。輪詢是在特定的的時(shí)間間隔(time interval)(如每1秒),由瀏覽器對服務(wù)器發(fā)出HTTP request,然后由服務(wù)器返回最新的數(shù)據(jù)給客服端的瀏覽器。這種傳統(tǒng)的HTTP request d的模式帶來很明顯的缺點(diǎn) – 瀏覽器需要不斷的向服務(wù)器發(fā)出請求(request),然而HTTP request 的header是非常長的,里面包含的數(shù)據(jù)可能只是一個(gè)很小的值,這樣會占用很多的帶寬。

而最比較新的技術(shù)去做輪詢的效果是Comet – 用了AJAX。但這種技術(shù)雖然可達(dá)到全雙工通信,但依然需要發(fā)出請求(reuqest)。

Html5? WebSocket ??

在 WebSocket API,瀏覽器和服務(wù)器只需要要做一個(gè)握手的動作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。在此WebSocket 協(xié)議中,為我們實(shí)現(xiàn)即使服務(wù)帶來了兩大好處:

1. Header

互相溝通的Header是很小的-大概只有 2 Bytes

2. Server Push

服務(wù)器可以主動傳送數(shù)據(jù)給客戶端,只要客戶端打開的socket與服務(wù)器建立連接后,就可以把數(shù)據(jù)推送到這個(gè)socket上,從被動轉(zhuǎn)為主動。

WebSocket并不限于以Ajax(或XHR)方式通信,因?yàn)锳jax技術(shù)需要客戶端發(fā)起請求,而WebSocket服務(wù)器和客戶端可以彼此相互推送信息;XHR受到域的限制,而WebSocket允許跨域通信。
Ajax技術(shù)很聰明的一點(diǎn)是沒有設(shè)計(jì)要使用的方式。WebSocket為指定目標(biāo)創(chuàng)建,用于雙向推送消息。

2、HTML5 WebSockets API

WebSocket對象

WebSocket在DOM中是window對象的子對象,它具有:

  • WebSocket(url)構(gòu)造函數(shù)。

  • readyState。只讀屬性,其值可以是CONNECTING(0),OPEN(1),CLOSED(3)。

  • boolean send(in DOMString data)

  • void close()兩個(gè)方法,分別用于發(fā)送消息和關(guān)閉WebSocket連接

onopen, onmessage, 和onclosee三個(gè)事件屬性,分別對open, message和close三個(gè)WebSocket事件。

1、瀏覽器支持情況檢測

檢測瀏覽器支持情況

function loadDemo() {  
    if (window.WebSocket) {  
        //supported  
    } else {  
        // not supported  
    }  
}

2、WebSocket對象的創(chuàng)建和服務(wù)器連接

要連接通信端點(diǎn),只需要創(chuàng)建一個(gè)新的WebSocket實(shí)例,并提供希望連接的對端URL。ws://和wss://前綴分別表示W(wǎng)ebSocket連接和安全的WebSocket連接。

url = "ws://localhost:8080/echo";  w = new WebSocket(url);

建立WebSocket連接時(shí),可以列出Web應(yīng)用能夠使用的協(xié)議。WebSocket構(gòu)造函數(shù)的第二個(gè)參數(shù)既可以是字符串,也可以是字符串組。

w = new WebSocket(url, ["proto1", "proto2"]);

假設(shè)proto1和proto2是定義明確、可能已注冊且標(biāo)準(zhǔn)化的協(xié)議名稱,它們能夠同時(shí)為客戶端和服務(wù)器端所理解。服務(wù)器會從列表中選擇首選協(xié)議。

onopen = function(e) {  
    //確定服務(wù)器選擇的協(xié)議  
    log(e.target.protocol);  
}

3、添加事件監(jiān)聽器

WebSocket編程遵循異步編程模型;打開socket后,只需等待事件發(fā)生,而不需要主動向服務(wù)器輪詢,所以需要在WebSocket對象中添加回調(diào)函數(shù)來監(jiān)聽事件。
WebSocket對象有三個(gè)事件:open、close和message對應(yīng)有三個(gè)事件監(jiān)聽器onopen,onmessage,onclose來處理連接的生命周期的每個(gè)階段,當(dāng)然還可以是onerror來監(jiān)聽錯(cuò)誤,如以下示例所示。

w.onopen = function() {  
    log("open");  
    w.send("send message");  
}  
w.onmessage = function(e) {  
    log(e.data);  
}  
w.onclose = function(e) {  
    log("closed");  
}  
w.onerror = function(e) {  
    log("error");  
}

4、發(fā)送消息

當(dāng)socket處于打開狀態(tài)(即onopen之后,onclose之前),可以用send方法來發(fā)送消息。消息發(fā)送完,可以調(diào)用close方法來終止連接,也可以不這么做,讓其保持打開狀態(tài)。

w.send();

你可能想測算在調(diào)用Send()函數(shù)之前,有多少數(shù)據(jù)備份在發(fā)送緩沖區(qū)中。bufferAmount屬性表示已在WebSocket上發(fā)送但尚未寫入網(wǎng)絡(luò)的字節(jié)數(shù)。它對于調(diào)節(jié)發(fā)送速率很有用。

document.getElementById("sendButton").onclick = function() {  
    if (w.bufferedAmount < bufferThreshold) {  
        w.send(document.getElementById("inputMessage").value);  
    }  
}

WebSocket API支持以二進(jìn)制數(shù)據(jù)的形式發(fā)送Blob和ArrayBuffer實(shí)例

var a = new Uint8Array([8, 6, 7, 5, 3, 0, 9]);  
w.send(a.buffer);

常量-readyState屬性

這些常量是readyState屬性的取值,可以用來描述WebSocket連接的狀態(tài)。

ConstantValueDescription
CONNECTING0連接還沒開啟。
OPEN1連接已開啟并準(zhǔn)備好進(jìn)行通信。
CLOSING2連接正在關(guān)閉的過程中。
CLOSED3連接已經(jīng)關(guān)閉,或者連接無法建立。

3.實(shí)例

<!DOCTYPE html><html><head>
    <title>webSocket實(shí)例</title></head><body>
    <h2>webSocket實(shí)例</h2>
    <input type="text" id="text">
    <button type="" id="connect" onclick="connect()">建立連接</button>
    <button type="" id="send" onclick="send()">發(fā)送數(shù)據(jù)</button>
    <button type="" id="disconnect" onclick="disconnect()">斷開連接</button>
    <p id="message"></p>
    <script type="text/javascript">
        var socket;        var readyState = ["正在連接","已經(jīng)連接","正在斷開","已經(jīng)斷開"];        var message = document.getElementById(&#39;message&#39;);        function connect(){

            try{                var url = &#39;ws:localhost/test&#39;;
                socket = new webSocket(url);
                message.innerHTML += "<p>socket狀態(tài):" +readyState[socket.readyState]+"</p>";
                socket.onopen = function(){
                    message.innerHTML += "<p>socket狀態(tài):" +readyState[socket.readyState]+"</p>";
                }
                socket.onmessage = function(msg){
                    message.innerHTML += "<p>socket狀態(tài):" +readyState[socket.readyState]+&#39;<br>&#39;+ "接收數(shù)據(jù)" + msg.data +"</p>";
                }
                socket.onclose = function(){
                    message.innerHTML += "<p>socket狀態(tài):" +readyState[socket.readyState]+"</p>";
                }
            }catch(exception){                // socket.onerror  = function(){
                    message.innerHTML += "<p>發(fā)生錯(cuò)誤!"+"</p>";                // }
            }
        }        function send(){
            var text = document.getElementById(&#39;text&#39;).value;            try{
                socket.send(text);
                message.innerHTML += "<p>發(fā)送數(shù)據(jù):" + text +"</p>";
            }catch(exception){
                message.innerHTML += "<p>發(fā)送數(shù)據(jù)出錯(cuò)</p>";
            }
        }        function disconnect(){
            socket.close();
        }    </script></body></html>

?以上就是Html5 中的 WebSocket通信的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(m.miracleart.cn)!


? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

??? ????
1601
29
PHP ????
1502
276
???
HTML5 ??-??? ???? ?? ?? ? ??? ?????. HTML5 ??-??? ???? ?? ?? ? ??? ?????. Jul 03, 2025 am 02:28 AM

HTML5SSE? ???? ?? ? ?? ? ??? ???? ???? ??? ?????. 1. ?? ? ?? ????? ??????. ??? ??? ????? ??? ?? ? ? 3 ? ?? ? ?????. ??? ??? ?? ??? ??? ?? ? ? ????. 2. ?? ???? ?? ?? ?? ?? ?? ?? ??? ???? ?? ??? ???? ?? ? ??? ???? ???? ??, ?? ?? ? ?? ?? ? ?? ?? TOKEN? ?? ?? ??? ?????. 3. ??? ???? ?? ????, ?? ??? ?? ?? ????, Navigator.online? ???? ??? ???? ?? ??? ????? ? ? ?? ??? ????? ??????. ??? ??? ?? ???? ???? ??? ??? ???? ? ????.

CSS ? JavaScript? HTML5 ??? ????? ?????. CSS ? JavaScript? HTML5 ??? ????? ?????. Jul 12, 2025 am 03:01 AM

HTML5, CSS ? JavaScript? ??? ??, ???? ?? ?? ? ???? ??? ????? ????????. 1. SEO ? ????? ???? ????? ??? ??? ? ?? ??? ??? ?? HTML5 ??? ??? ??????. 2. CSS? ???? ?? ??? ???? ???? ???? ??? ???? ????? ??? ?????. 3. JavaScript? ??? ???? ?? ???? DEFER ?? ASYNC? ???? ?? ???? ??? ?? ??? ????????. 4. ??? ??? ??? ???? ??? ??? ?? ? ??? ?? ?? ??? ?? ??? ???? ?? ?? ?? ??? ?? ?? ???? ??????. ??? ??? ??? ??? ????? ????? ?? ?? ? ? ????.

?? ???? ?? ??? HTML5 DocType? ?????. ?? ???? ?? ??? HTML5 DocType? ?????. Jul 03, 2025 am 02:35 AM

DocType? HTML ?? ????? ???? ?? ???? ? ???? ????? ???? ????. ?? ? ???? HTML ??? ?? ????? ???????. ? ??? ????? ??? ??? ?? ?? ??? ???? ????? ? ?? ?? ???????. ?? ?? ??? ??? ?? ??? ?? ???? ?? ??? ???? ?? ????. Charset, Viewport ?? ?? ?? ??? ????? ???????.

HTML5 Server-Sent Events (SSE)? ??? ???? ?????. HTML5 Server-Sent Events (SSE)? ??? ???? ?????. Jul 02, 2025 pm 04:46 PM

SSE (Server-Sentevents)? HTML5?? ??? ????? ????? ???? ?? ???? ?? ??????. ?? ??, ?? ? ?? ????? ??? ? HTTP ??? ?? ?? ?? ??? ?????. ??? ?? ????? ???? ??? ??? ? ???? ????. consteventSource = newEventSource ( '/stream'); eventSource.onMessage = function (event) {console.log ( '?? ??? :', event.data);}; ??? ??? ??? ???/???? ???????

HTML5 ??? ?? ? ? ???? ???? SEO ??. HTML5 ??? ?? ? ? ???? ???? SEO ??. Jul 03, 2025 am 01:16 AM

HTML5 ??? ??? Microdata? ???? ?? ??? ??? ?? ? ??? ??? ? ? ???? ? ????? ??? SEO? ???? ? ????. 1. HTML5 ??? ??? ???? ??? ??? ??? ????? ?? ?? ????? ??? ??? ??? ???? ? ??????. 2. ?? ??, ???, ?? ?? ?? ?? ?? ???? ???? ?? MicroData ??? ? ???? ???? ?? ??? ?? ??? ???? ?? ??? ??? ???? ? ??? ? ???; 3. ??? ???, ?? ??? ???, ??? ? ???? ??? ?????, Schema.org? ??? ????? ????? ??????, ?? SEO ??? ???? ????? ????? ?? ?????? ??????.

html5``vs` `??? ?????. html5``vs` `??? ?????. Jul 12, 2025 am 03:09 AM

????? ??? ?? ?? ?????. ??? ??? ???? ? ??? ??? ?????. 1. ?, ??, ?? ? ??? ????? ??? ? ???, ?? ?? ??? ????? ?????. 2. ??? ?? ??? ??? ??? ?? ???? ?? ??? ??? ?? ?? ??? ?????. 3. ??? ? ???? ??? ? ??? ???? ??? ?? ???????. 4. ?? ? ? ??? ????? ???? ????. 5. ??? ???? ???? ????? ?? ??? ??? ???? ? ?? ??? ?????.

HTML5 ??? ?? API? ???? ?? ??? ????. HTML5 ??? ?? API? ???? ?? ??? ????. Jul 02, 2025 pm 05:03 PM

??? ??? ?? ?? html5geolocation API? ???? ?? ?? ??? ??? ?? ??? ??? ???? ???????. ?? ??? Navigator.geolocation.getCurrentPosition ()?? ???? ??, ??? ?? ? ?? ?? ??? ???? ????. ??? ???? ???? ?? ??, ????, ???? ?? ????, ???? ?? ?, ?? ??? ? ??? ????? ????????. ???? ??? ??? ????. 1. ??? ???? ?? ?? ??? ??? ??? ? ?? ?? ??; 2. ???? ??? ????? ?? EnableHighAccuracy, ?? ??, ?? ? ?? ?? ??? ??????. 3. ?? ??? ?? ??? ???????

HTML5 ??? ?? ?? ?? (MSE) ?? HTML5 ??? ?? ?? ?? (MSE) ?? Jul 08, 2025 am 02:31 AM

MSE (MediaSourceExtensions)? W3C ??? ???? JavaScript? ??? ???? ???? ???? ?? ??? ?? ??? ???????. MediaSource? ?? ??? ??? ???? SourceBuffer? ???? ???? ???? ?? ??? ?? ??? ???? ????? ?????? ? ??? ??? ??? ? ? ????. MSE? ???? ?????? ??? ?????. ② ??? ??????. wource ?? ??? ???? ?? ???? ???? ?????. fetch ()? ?? ???? ? ???? ?? ?? ??? ??????. ???? ?? ??? ??? ????. utions ?? ??? ??; ② ?? ??? ?

See all articles