中任網

websocket與 node.js

參考網上的資料,成功跑起來的代碼( )

實現的功能 :nodejs建立web服務器,實時輸出“iostat -c 2”的結果,客戶端發送命令時,輸出請求的命令。
完整的代碼或使用方法請參考壓縮包裡的iostat-server.js文件及註釋。

websocket protocol是html5一種新的協議(protocol)。實現了瀏覽器與服務器全雙工通信(full-duplex)。
相比傳統http有如下好處:
* 一個web客戶端只建立一個tcp連接
* websocket服務端可以推送(push)數據到web客戶端.
* 有更加輕量級的頭,減少數據傳送量,互相溝通的header是很小的-大概只有2 Bytes。

websocket客戶端與服務端建立連接的過程:
客戶端創建websocket實例,發送如下握手信息連接服務器:


Tue Jul 19 15:52:17 2011
GET / HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8088
Origin:
Sec-WebSocket-Key1: 3106 2 + 9 3 n. 17 c /k 0 +
Sec-WebSocket-Key2: 279  90/1  4 38 2

啞V}

服務器斷獲取包後,提取總長度為20的sec-websocket-key,進行如下計算:把以上字符串轉化成數字,然後計算key中的空格數目,並用 key值除以空格數得到最後key值。
最後發送包含以下信息的head給client,完成握手。

 


Tue Jul 19 15:52:17 2011
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin:
Sec-WebSocket-Location: ws://localhost:8088/
Sec-WebSocket-Protocol: sample

^QNW階廃舒?畐

具體的ws協議,可以參考:

客戶端在握手成功後,客戶端的websocket對象一共綁定了四個事件:
* onopen 建立連接後觸發
* onmessage 收到消息後觸發
* onerror 發生錯誤時觸發
* onclose 關閉連接時觸發
詳細的websocket API,可以參考:

通信數據都是以”\x00″開頭以”\xFF”結尾的,並且都是UTF-8編碼的。注意客戶端的websocket對象能夠自動將頭尾去除,獲得主 體數據.

node.js 天生就是一個高效的服務端語言,可以直接使用 javascript直接來處理來自客戶端的請求,這樣如果服務端這邊需要大量的業務邏輯開發,則可以直接使用node開發。

運行效果如下:
websocket