В моем предыдущем сообщении в блоге, Socket.io я кратко представил основное использование Socket.io и создал простую демонстрацию чата. Основываясь на вступительной главе, эта статья продолжает изучать расширенное использование Socket.io. Эта статья начнется с конфигурации, номеров, событий и т. Д., И представит некоторые практические API и меры предосторожности в Socket.io.
1. Конфигурация
Socket.io предоставляет 4 конфигурации API: io.configure, io.set, io.enable, io.disable. io.set устанавливает один элемент, а io.enable и io.disable используются для установки логической конфигурации в одном элементе. IO.Configure позволяет настроить различные параметры для различных производственных сред (таких как разработка, тест и т. Д.). Ниже определяется различные конфигурации socket.io в двух средах:
Кода -копия выглядит следующим образом:
var io = require ('socket.io'). Слушайте (80);
io.configure ('development', function () {
io.enable ('Browser Client etag');
io.set ('log level', 1);
});
io.configure ('release', function () {
io.set ('transports', ['websocket']);
});
В следующем перечислены некоторые обычно используемые элементы конфигурации. Для конкретных параметров конфигурации, пожалуйста, обратитесь к официальному вики.
1. Socket.io поддерживает множество способов реализации мгновенного онлайн -общения, таких как WebSocket, опрос и т. Д. Эта конфигурация позволяет вам самостоятельно выбрать метод резервного копирования.
2) .log Уровень (по умолчанию 3): самый низкий уровень вывода журнала, 0 - ошибка, 1 - это предупреждение, 2 - это информация, а 3 - это отладка, а все типы журналов выводится по умолчанию.
3). Верк -интервал (по умолчанию 25 секунд): интервал отправки пакета Heartbeat, клиенту необходимо отправить пакет Heartbeat на сервер в течение этого периода времени для поддержания связи.
2. Комната
Комната - очень полезная функция, предоставленная Socket.io. Комната эквивалентна предоставлению пространства имен для некоторых указанных клиентов, и все трансляции и коммуникации в комнате не будут влиять на клиентов за пределами комнаты.
Во введении мы знаем, что Socket.join («Название комнаты») может использоваться для входа в комнату по клиенту, а Socket.Leave («Название комнаты») используется для покинуть комнату. Когда клиент входит в комнату, сообщение может транслироваться в комнате двумя способами:
Кода -копия выглядит следующим образом:
// 1. Трансляция на мероприятие в мою комнату, и представитель будет исключен (то есть не будет получено никакого сообщения)
io.sockets.on ('connection', function (ocket) {
// Примечание. По сравнению со следующим, здесь следует отправить события с точки зрения клиента
socket.broadcast.to ('My Room'). Emit ('Event_Name', DATA);
}
// 2. Транслировать мероприятие в другую комнату, и все клиенты в этой комнате получат сообщение
// Примечание: по сравнению с вышеизложенным, здесь следует отправить события с точки зрения сервера
io.sockets.in ('другая комната'). Emit ('event_name', data);
// транслируется всем клиентам
io.sockets.emit ('event_name', data);
В дополнение к вещательным сообщениям в комнате вы также можете получить информацию о комнате через следующее API.
Кода -копия выглядит следующим образом:
// получить информацию обо всех комнатах
// Ключ - это имя комнаты, значение - это массив идентификатора сокета, соответствующий имени комнаты
io.sockets.manager.rooms
// Получить клиента в определенной комнате и вернуть все экземпляры сокетов в этой комнате
io.sockets.clients («конкретная комната»)
// получить информацию о комнате, введенную этим сокетом через Socket.id
io.sockets.manager.roomclients [socket.id]
3. События
Socket.io имеет некоторые встроенные события по умолчанию. При разработке событий мы должны избегать имен событий по умолчанию и гибко использовать эти события по умолчанию.
События на стороне сервера:
1) .io.sockets.on ('connection', function (ocket) {}): запускается после успешного подключения к сокету, используется для инициализации
socket.on ('message', function (сообщение, обратный вызов) {}): это событие запускается, когда клиент передает сообщение через socket.send. Сообщение является передаваемым сообщением. Обратный вызов - это обратный вызов, который будет выполнен после получения сообщения.
2) .socket.on ('inhome', function (data) {}): запускается при получении какого -либо события
3) .socket.on ('Dinnonnect', function () {}): триггеры, когда гнездо теряет соединение (включая любые ситуации отключения, такие как закрытие браузера, активно отключение, отключение и т. Д.)
Клиентские события:
1) .connect: соединение успешно
2). Соглашение: соединение
3) .disconnect: отключить
4) .connect_failed: соединение не удалось
5) .error: произошла ошибка и не может быть обработана другими типами событий.
6) .message: то же самое событие сообщения на стороне сервера
7).
8) .Reconnect_failed: повторно подключить
9) .Reconnect: успешно подключен
10). РЕЗОНЕНИЕ: Вновь подключение
Здесь мы должны упомянуть заказ, когда клиентский сокет инициирует соединение. Когда первое соединение подключено, заказ запуска событий: Connect-> Connect; Когда соединение проиграно, порядок запуска событий: Deancnect-> Reconnectucting (может быть выполнено несколько раз)-> Connecting-> Reconnect-> Connect-> Connect.
4. Авторизация
1). Трансляция всем клиентам: socket.broadcast.emit ('вещательное сообщение');
2). Введите комнату (очень простой в использовании! Это эквивалентно пространству имен, которое можно транслировать в определенную комнату, не затрагивая клиентов в других комнатах или нет в комнате): Socket.join («Название вашей комнаты»);
3). Вещательное сообщение в комнату (отправитель не может получить сообщение): Socket.broadcast.to («Имя вашей комнаты»). EMIT («Сообщение о трансляции»);
4). Вещательные сообщения в комнату (включая отправителя могут получать сообщения) (этот API принадлежит io.sockets): io.sockets.in ('другое имя комнаты'). Emit ('Sportment Room Message');
5). PUST WebSocket Communication: (Client) socket.send ('hi'), (сервер) используйте socket.on ('message', function (data) {}) для получения.
Это в основном введение в расширенное использование Socket.io. Я лично чувствую, что этих основных API достаточно в повседневном использовании, что также отражает чрезвычайно простую и простой в использовании философию дизайна. Эта статья - просто способ привлечь внимание. При столкновении с проблемами, которые не могут быть решены в реальном использовании, будет лучше проверить официальную подробную вики.