Grappler 是一個用於「comet」連線的簡約伺服器,它在所有傳輸中公開單一、一致的 API。 Grappler 目前支援以下傳輸(每種傳輸都有目前已知支援的瀏覽器清單):
* - 某些瀏覽器的 XMLHttpRequest 實作包含意外的怪癖(例如 Android 1.6 的內建 Web 瀏覽器)
Grappler 匯出一個主要物件: Server
。
lib/common.js 匯出LOG
和STATE
對象,其中包含分別用於記錄訊息和檢查客戶端狀態時的常數。
LOG
物件是:
{
INFO: 1,
WARN: 2,
ERROR: 3
}
STATE
物件是:
{
ACCEPTED: 1, // internal use only
TEMP: 2, // internal use only
PROTO_HTTP: 4, // client is HTTP-based
PROTO_WEBSOCKET: 8 // client is WebSocket-based
}
建立 grappler 伺服器的新實例。
options
是一個具有以下預設值的物件:
{
// A callback for receiving "debug" information. It is called with two arguments: message and message level.
// Message level is one of the values in the `LOG` object.
logger: function(msg, msgLevel) {},
// A string or array of strings which denote who is allowed to connect to this grappler Server instance.
// The format of the string is: "hostname:port", "hostname", or an asterisk substituted for either the hostname
// or port, or both, to act as a wildcard.
origins: "*:*",
// An integer value in milliseconds representing the interval in which a ping is sent to an HTTP client for those
// transports that need to do so.
pingInterval: 3000,
// A storage provider used to store client objects. The default is to use 'object', a simple hash. Other available
// storage providers can be found in lib/storage. The value here is the name without the 'storage' prefix and file extension.
storage: 'object'
}
fnHandleNormalHTTP
是回呼函數,能夠覆寫傳入 HTTP 連線的處理程序。如果沒有傳送標頭,則 grappler 會控制連線。提供給此回呼的參數與http.Server
的request
事件相同,即: http.ServerRequest 和 http.ServerResponse 物件。需要注意的是,如果您希望 grappler 自動處理所有傳入的 HTTP 連接,但希望為fnAcceptClient
指定回調,則需要為fnHandleNormalHTTP
指定false
值。
fnAcceptClient
是在客戶端連線時執行的回呼。此回呼的主要目的是有機會立即拒絕客戶端進一步存取 grappler 伺服器。例如,您的應用程式可能會維護一個黑名單,或者可能會在一定時間內進行 x 個連線後自動將某個 IP 列入黑名單/限制。如果此回呼傳回false
,連線將自動斷開,否則將允許連線。此回呼接收一個參數,該參數是表示連接的net.Stream
物件。
function(client) { }
每次新客戶端成功連接到系統時都會發出此事件。 client
是HttpClient
的實例。
function(err) { }
發生意外錯誤時發出。
啟動伺服器偵聽指定的port
和host
。如果省略host
,伺服器將偵聽任何 IP 位址。
使用可選encoding
將data
傳送到每個連接的客戶端。
透過不再偵聽傳入連線並切斷任何現有客戶端連線來關閉伺服器。
grappler 中也使用了另一個重要的對象,那就是HttpClient
物件。 HttpClient
代表連接到伺服器的用戶,可用於與該用戶互動。
function() { }
當客戶端的寫入緩衝區變空時發出。
function() { }
當客戶端斷開連線時發出。
包含客戶端目前狀態的位元欄位。請參閱前面提到的STATE
物件以了解有效位元。
客戶端的IP位址。
使用可選encoding
將data
傳送到客戶端。如果整個資料已成功刷新到核心緩衝區,則此函數傳回true
。否則,如果全部或部分資料在使用者記憶體中排隊,它將傳回false
。當核心緩衝區再次空閒時,會發出排出drain
。
使用可選的encoding
將data
傳送到所有其他連接的客戶端。
強制切斷客戶端與伺服器的連線。