Grappler は、すべてのトランスポートにわたって単一の一貫した API を公開する、「comet」接続用の最小限のサーバーです。 Grappler は現在、次のトランスポートをサポートしています (それぞれに、現在知られているサポートされているブラウザのリストが含まれています)。
* - 一部のブラウザの XMLHttpRequest 実装には予期しない癖が含まれています (例: Android 1.6 の組み込み Web ブラウザ)
Grappler は 1 つのメイン オブジェクト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
}
グラップラー サーバーの新しいインスタンスを作成します。
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 接続のグラップラーをオーバーライドできるコールバックです。ヘッダーが送信されない場合、グラップラーが接続を制御します。このコールバックに指定される引数は、 http.Server
のrequest
イベント、つまり http.ServerRequest オブジェクトと http.ServerResponse オブジェクトの場合と同じです。 grappler にすべての受信 HTTP 接続を自動的に処理させたいが、 fnAcceptClient
のコールバックを指定したい場合は、 fnHandleNormalHTTP
にfalse
値を指定する必要があることに注意してください。
fnAcceptClient
、クライアントが接続した瞬間に実行されるコールバックです。このコールバックの主な目的は、クライアントによるグラップラー サーバーへのさらなるアクセスを即座に拒否する機会を与えることです。たとえば、アプリケーションがブラックリストを維持したり、一定時間内に x 回接続した後、特定の IP を自動的にブラックリストに登録したり制限したりすることができます。このコールバックがfalse
返した場合、接続は自動的に切断されます。それ以外の場合、接続は許可されます。コールバックは、接続を表すnet.Stream
オブジェクトである 1 つの引数を受け取ります。
function(client) { }
このイベントは、新しいクライアントがシステムに正常に接続されるたびに生成されます。 client
HttpClient
のインスタンスです。
function(err) { }
予期しないエラーが発生したときに発行されます。
指定されたport
とhost
でリッスンするサーバーを起動します。 host
が省略された場合、サーバーは任意の IP アドレスを listen します。
オプションのencoding
使用して、接続されているすべてのクライアントにdata
送信します。
受信接続をリッスンしなくなり、既存のクライアント接続を切断することにより、サーバーをシャットダウンします。
grappler で使用される重要なオブジェクトがもう 1 つあり、それはHttpClient
オブジェクトです。 HttpClient
サーバーに接続しているユーザーを表し、そのユーザーと対話するために使用できます。
function() { }
クライアントの書き込みバッファが空になると発生します。
function() { }
クライアントが切断されたときに発生します。
クライアントの現在の状態を含むビットフィールド。有効なビットについては、前述のSTATE
オブジェクトを参照してください。
クライアントの IP アドレス。
オプションのencoding
使用してdata
クライアントに送信します。データ全体がカーネル バッファに正常にフラッシュされた場合、この関数はtrue
返します。それ以外の場合、データのすべてまたは一部がユーザー メモリのキューに入れられた場合はfalse
を返します。カーネル バッファが再び空くと、 drain
発行されます。
オプションのencoding
使用して、接続されている他のすべてのクライアントにdata
送信します。
クライアントのサーバーへの接続を強制的に切断します。