Grappler es un servidor minimalista para conexiones "cometas" que expone una API única y consistente en todos los transportes. Grappler actualmente admite los siguientes transportes (cada uno con una lista de navegadores compatibles actualmente):
* - Las implementaciones XMLHttpRequest de algunos navegadores contienen peculiaridades inesperadas (por ejemplo, el navegador web integrado para Android 1.6).
Grappler exporta un objeto principal: Server
.
lib/common.js exporta objetos LOG
y STATE
, que contienen constantes utilizadas para registrar mensajes y verificar el estado de un cliente, respectivamente.
El objeto LOG
es:
{
INFO: 1,
WARN: 2,
ERROR: 3
}
El objeto STATE
es:
{
ACCEPTED: 1, // internal use only
TEMP: 2, // internal use only
PROTO_HTTP: 4, // client is HTTP-based
PROTO_WEBSOCKET: 8 // client is WebSocket-based
}
Crea una nueva instancia de un servidor Grappler.
options
es un objeto con los siguientes valores predeterminados:
{
// 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
es una devolución de llamada que puede anular el grappler para una conexión HTTP entrante. Si no se envían encabezados, entonces Grappler toma el control de la conexión. Los argumentos proporcionados para esta devolución de llamada son los mismos para el evento request
http.Server
, es decir: objetos http.ServerRequest y http.ServerResponse. Cabe señalar que si desea que Grappler maneje automáticamente todas las conexiones HTTP entrantes pero desea especificar una devolución de llamada para fnAcceptClient
, debe especificar un valor false
para fnHandleNormalHTTP
.
fnAcceptClient
es una devolución de llamada que se ejecuta en el momento en que un cliente se conecta. El objetivo principal de esta devolución de llamada es tener la oportunidad de negar inmediatamente a un cliente acceso adicional al servidor Grappler. Por ejemplo, su aplicación puede mantener una lista negra o puede automáticamente incluir en la lista negra/reducir una determinada IP después de x conexiones en un período de tiempo determinado. Si esta devolución de llamada devuelve false
, la conexión se interrumpirá automáticamente; de lo contrario, se permitirá la conexión. La devolución de llamada recibe un argumento, que es el objeto net.Stream
que representa la conexión.
function(client) { }
Este evento se emite cada vez que un nuevo cliente se conecta exitosamente al sistema. client
es una instancia de HttpClient
.
function(err) { }
Emitido cuando ocurre un error inesperado.
Inicia el servidor escuchando en el port
y host
especificados. Si se omite host
, el servidor escuchará en cualquier dirección IP.
Envía data
a cada cliente conectado utilizando una encoding
opcional.
Apaga el servidor al dejar de escuchar las conexiones entrantes y al cortar las conexiones de clientes existentes.
Hay otro objeto importante que se utiliza en Grappler y es el objeto HttpClient
. HttpClient
representa un usuario conectado al servidor y puede usarse para interactuar con ese usuario.
function() { }
Emitido cuando el búfer de escritura del cliente queda vacío.
function() { }
Emitido cuando el cliente se ha desconectado.
Un campo de bits que contiene el estado actual del cliente. Consulte el objeto STATE
mencionado anteriormente para conocer los bits válidos.
La dirección IP del cliente.
Envía data
utilizando una encoding
opcional al cliente. Esta función devuelve true
si todos los datos se vaciaron correctamente al búfer del kernel. De lo contrario, devolverá false
si todos o parte de los datos estaban en cola en la memoria del usuario. drain
se emitirá cuando el búfer del kernel esté libre nuevamente.
Envía data
a todos los demás clientes conectados utilizando una encoding
opcional.
Corta por la fuerza la conexión del cliente con el servidor.