Grappler ist ein minimalistischer Server für „Comet“-Verbindungen, der eine einzige, konsistente API für alle Transporte bereitstellt. Grappler unterstützt derzeit die folgenden Transporte (jeweils mit einer Liste der derzeit bekannten unterstützten Browser):
* – Die XMLHttpRequest-Implementierungen einiger Browser enthalten unerwartete Macken (z. B. der integrierte Webbrowser für Android 1.6).
Grappler exportiert ein Hauptobjekt: Server
.
lib/common.js exportiert LOG
und STATE
Objekte, die Konstanten enthalten, die zum Protokollieren von Nachrichten bzw. zum Überprüfen des Status eines Clients verwendet werden.
Das LOG
-Objekt ist:
{
INFO: 1,
WARN: 2,
ERROR: 3
}
Das STATE
Objekt ist:
{
ACCEPTED: 1, // internal use only
TEMP: 2, // internal use only
PROTO_HTTP: 4, // client is HTTP-based
PROTO_WEBSOCKET: 8 // client is WebSocket-based
}
Erstellt eine neue Instanz eines Grappler-Servers.
options
ist ein Objekt mit den folgenden Standardwerten:
{
// 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
ist ein Rückruf, der Grappler für eine eingehende HTTP-Verbindung überschreiben kann. Wenn keine Header gesendet werden, übernimmt Grappler die Kontrolle über die Verbindung. Die für diesen Rückruf bereitgestellten Argumente sind die gleichen für das request
von http.Server
, d. h. für die Objekte http.ServerRequest und http.ServerResponse. Es ist zu beachten, dass Sie einen false
Wert für fnHandleNormalHTTP
angeben müssen, wenn Sie möchten, dass Grappler alle eingehenden HTTP-Verbindungen automatisch verarbeitet, aber einen Rückruf für fnAcceptClient
angeben möchten.
fnAcceptClient
ist ein Rückruf, der ausgeführt wird, sobald ein Client eine Verbindung herstellt. Der Hauptzweck dieses Rückrufs besteht darin, die Möglichkeit zu haben, einem Client sofort den weiteren Zugriff auf den Grappler-Server zu verweigern. Beispielsweise kann Ihre Anwendung eine Blacklist verwalten oder eine bestimmte IP nach x Verbindungen in einer bestimmten Zeitspanne automatisch auf die Blacklist setzen/drosseln. Wenn dieser Rückruf false
zurückgibt, wird die Verbindung automatisch getrennt, andernfalls wird die Verbindung zugelassen. Der Rückruf erhält ein Argument, nämlich das net.Stream
Objekt, das die Verbindung darstellt.
function(client) { }
Dieses Ereignis wird jedes Mal ausgegeben, wenn ein neuer Client erfolgreich eine Verbindung zum System hergestellt hat. client
ist eine Instanz von HttpClient
.
function(err) { }
Wird ausgegeben, wenn ein unerwarteter Fehler auftritt.
Startet den Server, der den angegebenen port
und host
überwacht. Wenn host
weggelassen wird, überwacht der Server jede IP-Adresse.
Sendet data
mithilfe einer optionalen encoding
an jeden verbundenen Client.
Fährt den Server herunter, indem er nicht mehr auf eingehende Verbindungen wartet und alle vorhandenen Clientverbindungen trennt.
Es gibt ein weiteres wichtiges Objekt, das im Grappler verwendet wird, und das ist das HttpClient
Objekt. HttpClient
stellt einen mit dem Server verbundenen Benutzer dar und kann zur Interaktion mit diesem Benutzer verwendet werden.
function() { }
Wird ausgegeben, wenn der Schreibpuffer des Clients leer wird.
function() { }
Wird ausgegeben, wenn der Client die Verbindung getrennt hat.
Ein Bitfeld, das den aktuellen Status des Clients enthält. Gültige Bits finden Sie im zuvor erwähnten STATE
Objekt.
Die IP-Adresse des Clients.
Sendet data
mit einer optionalen encoding
an den Client. Diese Funktion gibt true
zurück, wenn die gesamten Daten erfolgreich in den Kernelpuffer geleert wurden. Andernfalls wird false
zurückgegeben, wenn alle oder ein Teil der Daten im Benutzerspeicher in die Warteschlange gestellt wurden. drain
wird ausgegeben, wenn der Kernel-Puffer wieder frei ist.
Sendet data
mithilfe einer optionalen encoding
an alle anderen verbundenen Clients.
Trennt die Verbindung des Clients zum Server zwangsweise.