HTML5 WebSocket

HTML5 WebSocket

WebSocket是HTML5開始提供的一種在單個 TCP 連接上進行全雙工通訊的協(xié)議检痰。

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

瀏覽器通過 JavaScript 向服務(wù)器發(fā)出建立 WebSocket 連接的請求椎椰,連接建立以后境钟,客戶端和服務(wù)器端就可以通過 TCP 連接直接交換數(shù)據(jù)。

當(dāng)你獲取 Web Socket 連接后俭识,你可以通過 send() 方法來向服務(wù)器發(fā)送數(shù)據(jù),并通過 onmessage 事件來接收服務(wù)器返回的數(shù)據(jù)洞渔。

以下 API 用于創(chuàng)建 WebSocket 對象套媚。

var Socket = new WebSocket(url, [protocol] );

以上代碼中的第一個參數(shù) url, 指定連接的 URL。第二個參數(shù) protocol 是可選的磁椒,指定了可接受的子協(xié)議堤瘤。

WebSocket 屬性

以下是 WebSocket 對象的屬性。假定我們使用了以上代碼創(chuàng)建了 Socket 對象:

屬性 描述
Socket.readyState 只讀屬性 readyState 表示連接狀態(tài)浆熔,可以是以下值:0 - 表示連接尚未建立本辐。1 - 表示連接已建立,可以進行通信医增。2 - 表示連接正在進行關(guān)閉慎皱。3 - 表示連接已經(jīng)關(guān)閉或者連接不能打開。
Socket.bufferedAmount 只讀屬性 bufferedAmount 已被 send() 放入正在隊列中等待傳輸叶骨,但是還沒有發(fā)出的 UTF-8 文本字節(jié)數(shù)茫多。

WebSocket 事件

以下是 WebSocket 對象的相關(guān)事件。假定我們使用了以上代碼創(chuàng)建了 Socket 對象:

事件 事件處理程序 描述
onopen Socket.onopen 連接建立時觸發(fā)
onmessage Socket.onmessage 客戶端接收服務(wù)端數(shù)據(jù)時觸發(fā)
onerror Socket.onerror 通信發(fā)生錯誤時觸發(fā)
onclose Socket.onclose 連接關(guān)閉時觸發(fā)

WebSocket 方法

以下是 WebSocket 對象的相關(guān)方法忽刽。假定我們使用了以上代碼創(chuàng)建了 Socket 對象:

方法 描述
Socket.send() 使用連接發(fā)送數(shù)據(jù)
Socket.close() 關(guān)閉連接

WebSocket 實例

WebSocket 協(xié)議本質(zhì)上是一個基于 TCP 的協(xié)議天揖。

為了建立一個 WebSocket 連接,客戶端瀏覽器首先要向服務(wù)器發(fā)起一個 HTTP 請求跪帝,這個請求和通常的 HTTP 請求不同今膊,包含了一些附加頭信息,其中附加頭信息"Upgrade: WebSocket"表明這是一個申請協(xié)議升級的 HTTP 請求伞剑,服務(wù)器端解析這些附加的頭信息然后產(chǎn)生應(yīng)答信息返回給客戶端斑唬,客戶端和服務(wù)器端的 WebSocket 連接就建立起來了,雙方就可以通過這個連接通道自由的傳遞信息,并且這個連接會持續(xù)存在直到客戶端或者服務(wù)器端的某一方主動的關(guān)閉連接赖钞。

<!DOCTYPE HTML>
<html>
   <head>
   <meta charset="utf-8">
   <title>菜鳥教程(runoob.com)</title>
    
      <script type="text/javascript">
         function WebSocketTest() {
            if ("WebSocket" in window) {
               alert("您的瀏覽器支持 WebSocket!");
               
               // 打開一個 web socket
               var ws = new WebSocket("ws://localhost:9998/echo");
                
               ws.onopen = function() {
                  // Web Socket 已連接上腰素,使用 send() 方法發(fā)送數(shù)據(jù)
                  ws.send("發(fā)送數(shù)據(jù)");
                  alert("數(shù)據(jù)發(fā)送中...");
               };
                
               ws.onmessage = function (evt) { 
                  var received_msg = evt.data;
                  alert("數(shù)據(jù)已接收...");
               };
                
               ws.onclose = function() { 
                  // 關(guān)閉 websocket
                  alert("連接已關(guān)閉..."); 
               };
            } else {
               // 瀏覽器不支持 WebSocket
               alert("您的瀏覽器不支持 WebSocket!");
            }
         }
      </script>
        
   </head>
   <body>
   
      <div id="sse">
         <a href="javascript:WebSocketTest()">運行 WebSocket</a>
      </div>
      
   </body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雪营,隨后出現(xiàn)的幾起案子弓千,更是在濱河造成了極大的恐慌,老刑警劉巖献起,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洋访,死亡現(xiàn)場離奇詭異,居然都是意外死亡谴餐,警方通過查閱死者的電腦和手機姻政,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岂嗓,“玉大人汁展,你說我怎么就攤上這事⊙嵫常” “怎么了食绿?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長公罕。 經(jīng)常有香客問我器紧,道長,這世上最難降的妖魔是什么楼眷? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任铲汪,我火速辦了婚禮,結(jié)果婚禮上罐柳,老公的妹妹穿的比我還像新娘掌腰。我一直安慰自己,他們只是感情好硝清,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布辅斟。 她就那樣靜靜地躺著,像睡著了一般芦拿。 火紅的嫁衣襯著肌膚如雪士飒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天蔗崎,我揣著相機與錄音酵幕,去河邊找鬼。 笑死缓苛,一個胖子當(dāng)著我的面吹牛芳撒,可吹牛的內(nèi)容都是我干的邓深。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼笔刹,長吁一口氣:“原來是場噩夢啊……” “哼芥备!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舌菜,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤萌壳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后日月,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袱瓮,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年爱咬,在試婚紗的時候發(fā)現(xiàn)自己被綠了尺借。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡精拟,死狀恐怖燎斩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜂绎,我是刑警寧澤瘫里,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站荡碾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏局装。R本人自食惡果不足惜坛吁,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铐尚。 院中可真熱鬧拨脉,春花似錦、人聲如沸宣增。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爹脾。三九已至帖旨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灵妨,已是汗流浹背解阅。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泌霍,地道東北人货抄。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蟹地。 傳聞我的和親對象是個殘疾皇子积暖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容