Grappler — это минималистичный сервер для «кометных» соединений, который предоставляет единый согласованный API для всех видов транспорта. Grappler в настоящее время поддерживает следующие транспорты (каждый со списком известных на данный момент поддерживаемых браузеров):
* - Реализации XMLHttpRequest в некоторых браузерах содержат неожиданные особенности (например, встроенный веб-браузер для Android 1.6).
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
}
Создает новый экземпляр сервера захвата.
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-соединения. Если заголовки не отправляются, грепплер берет на себя управление соединением. Аргументы, предоставляемые этому обратному вызову, одинаковы для события request
http.Server
, то есть: объекты http.ServerRequest и http.ServerResponse. Следует отметить, что если вы хотите, чтобы Grappler автоматически обрабатывал все входящие HTTP-соединения, но хотите указать обратный вызов для fnAcceptClient
, вам необходимо указать false
значение для fnHandleNormalHTTP
.
fnAcceptClient
— это обратный вызов, который выполняется в момент подключения клиента. Основная цель этого обратного вызова — дать возможность немедленно запретить клиенту дальнейший доступ к серверу захвата. Например, ваше приложение может поддерживать черный список или может автоматически вносить в черный список или ограничивать определенный IP-адрес после x подключений в течение определенного периода времени. Если этот обратный вызов возвращает false
, соединение будет автоматически разорвано, в противном случае соединение будет разрешено. Обратный вызов получает один аргумент — объект net.Stream
, представляющий соединение.
function(client) { }
Это событие генерируется каждый раз, когда новый клиент успешно подключается к системе. client
является экземпляром HttpClient
.
function(err) { }
Выдается при возникновении непредвиденной ошибки.
Запускает сервер, прослушивающий указанный port
и host
. Если host
опущен, сервер будет прослушивать любой IP-адрес.
Отправляет data
каждому подключенному клиенту, используя дополнительную encoding
.
Выключает сервер, больше не прослушивая входящие соединения и разрывая существующие клиентские соединения.
Есть еще один важный объект, который используется в Grappler, — это объект HttpClient
. HttpClient
представляет пользователя, подключенного к серверу, и может использоваться для взаимодействия с этим пользователем.
function() { }
Генерируется, когда буфер записи клиента становится пустым.
function() { }
Генерируется, когда клиент отключился.
Битовое поле, содержащее текущее состояние клиента. Допустимые биты см. в ранее упомянутом объекте STATE
.
IP-адрес клиента.
Отправляет data
клиенту с использованием дополнительной encoding
. Эта функция возвращает true
если все данные были успешно сброшены в буфер ядра. В противном случае он вернет false
, если все или часть данных были помещены в очередь в пользовательской памяти. drain
будет сгенерирован, когда буфер ядра снова освободится.
Отправляет data
всем остальным подключенным клиентам, используя необязательную encoding
.
Принудительно разрывает соединение клиента с сервером.