Module 基礎模組

模組ws

websocket 支援模組

WebSocket協定是一種基於TCP 協定的全雙工通訊協議,在瀏覽器和伺服器之間建立起一個不斷開的連接,可以實現即時雙向資料傳輸,並且可以支援任意格式的資料傳輸。在fibjs 中,WebSocket支援模組提供了對應的API 接口,可以實現WebSocket伺服器端和客戶端的開發。

使用方法:

1
var ws = require('ws');

建立一個伺服器:

1 2 3 4 5 6 7 8 9
var 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 4
var 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

1
WebSocketMessage ws.Message;

Socket

WebSocket對象,參見WebSocket

1
WebSocket ws.Socket;

靜態函數

upgrade

建立一個websocket 協定處理器,從http接收upgrade 請求並握手,生成WebSocket物件

1
static Handler ws.upgrade(Function accept);

呼叫參數:

  • accept: Function, 連線成功處理函數,回呼將傳遞兩個參數,第一個參數為接收到的WebSocket對象,第二個參數為握手時的HttpRequest物件

回傳結果:


建立一個websocket 協定處理器,從http接收upgrade 請求並握手,生成WebSocket物件

1 2
static Handler ws.upgrade(Object opts, Function accept);

呼叫參數:

  • opts: Object, 連結選項,預設是{}
  • accept: Function, 連線成功處理函數,回呼將傳遞兩個參數,第一個參數為接收到的WebSocket對象,第二個參數為握手時的HttpRequest物件

回傳結果:

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,代表一個繼續幀

1
const ws.CONTINUE = 0;

TEXT

指定websocket 訊息類型1,代表一個文字幀

1
const ws.TEXT = 1;

BINARY

指定websocket 訊息類型2,代表一個二進位幀

1
const ws.BINARY = 2;

CLOSE

指定websocket 訊息類型8,連線關閉

1
const ws.CLOSE = 8;

PING

指定websocket 訊息類型9,代表一個ping 幀

1
const ws.PING = 9;

PONG

指定websocket 訊息類型10,代表一個pong 幀

1
const ws.PONG = 10;

CONNECTING

指定WebSocket狀態,表示正在連線中

1
const ws.CONNECTING = 0;

OPEN

指定WebSocket狀態,表示開啟狀態

1
const ws.OPEN = 1;

CLOSING

指定WebSocket狀態,表示已發送CLOSE 訊息,等待關閉中

1
const ws.CLOSING = 2;

CLOSED

指定WebSocket狀態,表示已關閉

1
const ws.CLOSED = 3;