2015年1月7日 星期三

[HTML5] WebSocket 筆記 (1) -在網頁中使用websocket

WebSocket

WebSocketHTML5開始提供的一種在單個 TCP 連線上進行全雙工通訊的協定。WebSocket通訊協定於2011年被IETF定為標準RFC 6455WebSocketAPIW3C定為標準。
在WebSocket API中,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。

 WebSocket協議定義了WS://和WSS://前綴來表示的WebSocket和WebSocket的安全連接。

資料來源- 維基百科


WebSocket 用起來很簡單,主要只有4個function,這四個function是選擇性的 ,並非全都要用

onopen()

當與server連線成功後會觸發的事件。

onclose()

當結束連線後會觸發的事件 。

onmessage()

收到Server傳送來的訊息時。

onerror()

發生錯誤時會觸發的事件。

以上四個都是事件觸發型的function , 不必用while 來輪詢 ,

有事件發生時自然就會執行這些函式。




以下用一個很簡單的例子來做WebSocket的Client端 與WebSocket Echo Server

做一個連線並發送訊息,Echo Server會回傳我們送給它的訊息。















想了解關於Echo Server,請點這裡  , 程式碼來源請點此 ,我加了一些註解幫助記憶。



 <!DOCTYPE html>  
 <html>  
   <head>  
     <title>WebSocket Echo Test</title>  
     <meta charset="UTF-8">  
     <meta name="viewport" content="width=device-width, initial-scale=1.0">  
     <script language="javascript" type="text/javascript">  
       //echo server的網址  
       var wsUri = "ws://echo.websocket.org/";  
       //定義元件  
       var outputElement;  
       //初始化function   
       function init()  
       {  
         outputElement = document.getElementById("output");  
         testWebSocket();  
       }  
       //執行websocket測試  
       function testWebSocket() {  
         //連線到echo server  
         websocket = new WebSocket(wsUri);  
         //連線成功要執行的function  
         websocket.onopen = function (evt) {  
           onOpen(evt)  
         };  
         //連結結速要執行的function  
         websocket.onclose = function (evt) {  
           onClose(evt)  
         };  
         //收到echo server傳來的訊息要做的function  
         websocket.onmessage = function (evt) {  
           onMessage(evt)  
         };  
         //當發生錯誤時要執行的function  
         websocket.onerror = function (evt) {  
           onError(evt)  
         };  
       }  
       //連線成功後,在outputElement顯示 ,並傳送一個測試訊息  
       function onOpen(evt) {  
         writeToScreen("連線成功");  
         doSend("hello blogger");  
       }  
       //當中斷連線時輸出訊息在outputElement上        
       function onClose(evt) {  
         writeToScreen("中斷連線");  
       }  
       //收到訊息時顯示在螢幕上  
       function onMessage(evt) {  
         writeToScreen('<span style="color: blue;">接收到: ' + evt.data + '</span>');  
         websocket.close();  
       }  
       //發生錯誤時顯示訊息在outputElement上  
       function onError(evt) {  
         writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);  
       }  
       //發送訊息  
       function doSend(message) {  
         writeToScreen("己傳送 " + message);  
         websocket.send(message);  
       }  
       //輸出訊息在outputElement上  
       function writeToScreen(message) {  
         var pre = document.createElement("p");  
         pre.style.wordWrap = "break-word";  
         pre.innerHTML = message;  
         output.appendChild(pre);  
       }  
       //加入事件,當載入完成後執行init()  
       window.addEventListener("load", init, false);  
     </script>  
   </head>  
   <body>  
     <div id="output"></div>  
   </body>  
 </html>  


執行結果


沒有留言:

張貼留言