模組ws
websocket 支援模組
WebSocket協定是一種基於TCP 協定的全雙工通訊協議,在瀏覽器和伺服器之間建立起一個不斷開的連接,可以實現即時雙向資料傳輸,並且可以支援任意格式的資料傳輸。在fibjs 中,WebSocket支援模組提供了對應的API 接口,可以實現WebSocket伺服器端和客戶端的開發。
使用方法:
1var ws = require('ws');
建立一個伺服器:
1
2
3
4
5
6
7
8
9var ws = require('ws');
var http = require('http');
var svr = new http.Server(80, {
'/ws': ws.upgrade((conn, req) => {
conn.onmessage = e => console.log(e.data);
})
});
svr.start();
在上面的程式碼中,首先透過require 函數載入了fibjs 內建的WebSocket支援模組,然後使用http.Server類別建立了一個HTTP 伺服器實例,指定了監聽的連接埠號碼和HTTP請求路徑,接著在指定路徑下使用upgrade 函數,將請求升級為WebSocket連接,伺服器會自動為每個連接建立一個WebSocket對象,提供了onopen、onmessage、onerror、onclose 等事件,並且可以透過send 函數向客戶端發送資料。
使用WebSocket客戶端:
1
2
3
4var ws = require('ws');
var conn = new ws.Socket('ws://127.0.0.1/ws');
conn.onmessage = e => console.log(e.data);
可以透過創建Socket實例,並指定一個WebSocket的URL,來完成客戶端的連線。Socket類別提供了onmessage、onerror、onclose 等回呼函數和send 函數,可以實現向伺服器發送資料和接收伺服器發送的資料。
需要注意的是,WebSocket支援模組僅僅是WebSocket協定的一個實現,需要在HTTP 協定之上才能運作。在伺服器端,可以透過upgrade 函數來將HTTP 請求轉換為WebSocket連接,而在客戶端,則需要透過WebSocket協定的URL 來指定需要連接的伺服器位址。
物件
Message
建立一個websocket 訊息對象,參見WebSocketMessage
1WebSocketMessage ws.Message;
Socket
1WebSocket ws.Socket;
靜態函數
upgrade
建立一個websocket 協定處理器,從http接收upgrade 請求並握手,生成WebSocket物件
1static Handler ws.upgrade(Function accept);
呼叫參數:
- accept: Function, 連線成功處理函數,回呼將傳遞兩個參數,第一個參數為接收到的WebSocket對象,第二個參數為握手時的HttpRequest物件
回傳結果:
- Handler, 返回協定處理器,可與HttpServer,Chain,Routing等對接``
建立一個websocket 協定處理器,從http接收upgrade 請求並握手,生成WebSocket物件
1
2static Handler ws.upgrade(Object opts,
Function accept);
呼叫參數:
- opts: Object, 連結選項,預設是{}
- accept: Function, 連線成功處理函數,回呼將傳遞兩個參數,第一個參數為接收到的WebSocket對象,第二個參數為握手時的HttpRequest物件
回傳結果:
- Handler, 返回協定處理器,可與HttpServer,Chain,Routing等對接
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4{
"perMessageDeflate": false, // specify whether to use permessage-deflate, default is true
"maxPayload": 67108864 // specify the maximum allowed message size, default is 64MB
}
常量
CONTINUE
指定websocket 訊息類型0,代表一個繼續幀
1const ws.CONTINUE = 0;
TEXT
指定websocket 訊息類型1,代表一個文字幀
1const ws.TEXT = 1;
BINARY
指定websocket 訊息類型2,代表一個二進位幀
1const ws.BINARY = 2;
CLOSE
指定websocket 訊息類型8,連線關閉
1const ws.CLOSE = 8;
PING
指定websocket 訊息類型9,代表一個ping 幀
1const ws.PING = 9;
PONG
指定websocket 訊息類型10,代表一個pong 幀
1const ws.PONG = 10;
CONNECTING
指定WebSocket狀態,表示正在連線中
1const ws.CONNECTING = 0;
OPEN
指定WebSocket狀態,表示開啟狀態
1const ws.OPEN = 1;
CLOSING
指定WebSocket狀態,表示已發送CLOSE 訊息,等待關閉中
1const ws.CLOSING = 2;
CLOSED
指定WebSocket狀態,表示已關閉
1const ws.CLOSED = 3;