1. 程式人生 > >WebSocket 學習筆記(一)

WebSocket 學習筆記(一)

關於 WebSocket

http 協議存在一個缺陷:通訊只能由客戶端發起

如果伺服器有連續的狀態變化,客戶端要獲知就需要向伺服器輪詢,由於輪詢的效率低,浪費資源。 WebSocket 因此而發明 。

在不斷地建立HTTP連線,然後等待服務端處理,可以體現HTTP協議的另外一個特點,被動性。
這裡寫圖片描述

關於 WebSocket 和 Socket 的聯絡和區別

這裡寫圖片描述

WebSocket 特點

伺服器可以主動向客戶端推送資訊,客戶端也可以主動向伺服器傳送資訊,是真正的雙向平等對話,屬於伺服器推送技術的一種。

  1. 建立在 TCP 協議之上,伺服器端的實現比較容易。
  2. 與 http 協議有著良好的相容性,握手階段採用 http 協議
  3. 資料格式比較輕量,效能開銷小,通訊高效。
  4. 可以傳送文字,也可以傳送二進位制資料。
  5. 沒有同源限制,客戶端可以與任意伺服器通訊。
  6. 協議識別符號是ws(如果加密,則為wss),伺服器網址就是 URL。

Node.js 輕鬆實現 WebSocket服務

step1 : 安裝 node.js

step2 : node install –save ws

安裝 websocket 庫 ws

step3 : 建立服務

在剛才安裝 ws 庫的更目錄建立一個 server.js

var WebSocketServer = require('ws').Server;

console
.log('WebSocket Service running...'); // 啟動了一個監聽 8181 埠的 websocket 服務 -> ws://localhost:8181 wss = new WebSocketServer({ port: 8181 }); wss.on('connection', function (ws) { console.log('client connected'); ws.on('message', function (message) { console.log(message); }); });

step4 : 啟動服務

node server.js

step5 : Client 端

隨意命名 client 端的名字,最終這個靜態網頁是直接開啟的

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>WebSocket</title>
    <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.js"></script>
    <script>
    var ws = new WebSocket("ws://localhost:8181");
    ws.onopen = function (e) {
        console.log('Connection to server opened');
    }
    function sendMessage() {
    console.log('Client send:' + $('#message').val() );
        ws.send($('#message').val());
    }
    </script>
</head>

<body >
    <input class="form-control" type="text" name="message" id="message" placeholder="Type text to echo in here" value="" />
        <button type="button" id="send" class="btn btn-primary" onclick="sendMessage();">Send </button>
</body>
</html>

這裡寫圖片描述

執行結果

這裡寫圖片描述