Grappler est un serveur minimaliste pour les connexions « comètes » qui expose une API unique et cohérente sur tous les transports. Grappler prend actuellement en charge les transports suivants (chacun avec une liste des navigateurs actuellement pris en charge) :
* - Les implémentations XMLHttpRequest de certains navigateurs contiennent des bizarreries inattendues (par exemple le navigateur Web intégré pour Android 1.6)
Grappler exporte un objet principal : Server
.
lib/common.js exporte les objets LOG
et STATE
, qui contiennent respectivement des constantes utilisées lors de la journalisation des messages et de la vérification de l'état d'un client.
L'objet LOG
est :
{
INFO: 1,
WARN: 2,
ERROR: 3
}
L'objet STATE
est :
{
ACCEPTED: 1, // internal use only
TEMP: 2, // internal use only
PROTO_HTTP: 4, // client is HTTP-based
PROTO_WEBSOCKET: 8 // client is WebSocket-based
}
Crée une nouvelle instance d'un serveur Grappler.
options
est un objet avec les valeurs par défaut suivantes :
{
// 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
est un rappel capable de remplacer le grappler pour une connexion HTTP entrante. Si aucun en-tête n'est envoyé, grappler prend le contrôle de la connexion. Les arguments fournis à ce rappel sont les mêmes pour l'événement request
de http.Server
, c'est-à-dire : les objets http.ServerRequest et http.ServerResponse. Il convient de noter que si vous souhaitez que Grappler gère automatiquement toutes les connexions HTTP entrantes mais que vous souhaitez spécifier un rappel pour fnAcceptClient
, vous devez spécifier une valeur false
pour fnHandleNormalHTTP
.
fnAcceptClient
est un rappel qui est exécuté au moment où un client se connecte. L'objectif principal de ce rappel est d'avoir la possibilité de refuser immédiatement à un client un accès ultérieur au serveur Grappler. Par exemple, votre application peut maintenir une liste noire ou peut automatiquement mettre sur liste noire/réduire une certaine adresse IP après x connexions dans un certain laps de temps. Si ce rappel renvoie false
, la connexion sera automatiquement interrompue, sinon la connexion sera autorisée. Le rappel reçoit un argument, qui est l'objet net.Stream
représentant la connexion.
function(client) { }
Cet événement est émis chaque fois qu'un nouveau client se connecte avec succès au système. client
est une instance de HttpClient
.
function(err) { }
Émis lorsqu'une erreur inattendue se produit.
Démarre le serveur en écoutant sur le port
et host
spécifiés. Si host
est omis, le serveur écoutera sur n'importe quelle adresse IP.
Envoie data
à chaque client connecté à l'aide d'un encoding
facultatif.
Arrête le serveur en n'écoutant plus les connexions entrantes et en coupant toutes les connexions client existantes.
Il existe un autre objet important utilisé dans Grappler, à savoir l'objet HttpClient
. HttpClient
représente un utilisateur connecté au serveur et peut être utilisé pour interagir avec cet utilisateur.
function() { }
Émis lorsque le tampon d'écriture du client devient vide.
function() { }
Émis lorsque le client s'est déconnecté.
Un champ de bits contenant l'état actuel du client. Voir l'objet STATE
mentionné précédemment pour les bits valides.
L'adresse IP du client.
Envoie data
en utilisant un encoding
facultatif au client. Cette fonction renvoie true
si toutes les données ont été vidées avec succès dans le tampon du noyau. Sinon, il renverra false
si tout ou partie des données ont été mises en file d'attente dans la mémoire utilisateur. drain
sera émis lorsque le tampon du noyau sera à nouveau libre.
Envoie data
à tous les autres clients connectés à l'aide d'un encoding
facultatif.
Coupe de force la connexion du client au serveur.