Socket.IO — это библиотека Javascript, состоящая из

  1. Сервер Node.js
  2. Клиентская библиотека Javascript для браузера, которую можно запустить из Node.js.

Эта связь между браузером и сервером осуществляется в режиме реального времени и на основе событий. Помимо того, что Socket.IO основан на событиях и работает в режиме реального времени, есть несколько замечательных вещей, которые поддерживают автоматическое переподключение. Это означает, что даже если клиент отключился, он попытается повторно подключиться, если не будет указано иное. Еще одна отличная вещь, которую делает Socket.IO, — это обнаружение отключения. Используя таймеры на сервере и клиенте, Socket.IO может определить, когда клиент больше не отвечает.

Еще некоторые возможности Socket.IO

  1. Двоичная поддержка — может генерировать любую сериализуемую структуру данных.
  2. Поддержка мультиплексирования — можно создавать множество пространств имен, используя одно и то же соединение.
  3. Поддержка комнат — в каждом пространстве имен можно определять комнаты, к которым клиенты могут присоединяться и выходить/транслировать в любую комнату.

Важно отметить

Socket.IO НЕ является реализацией WebSocket! Клиент WebSocket НЕ сможет подключиться к серверу Socket.IO. Это связано с тем, что Socket.IO добавляет метаданные к каждому пакету.

Как им пользоваться?

Легкий! Внутри вашего серверного проекта установите модуль npm:

npm install --save socket.io

Теперь у вас есть доступ к библиотеке Socket.IO. Чтобы создать простой http-сервер с помощью Express.js (app.js):

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(43594);

app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('event', function (data) {
    console.log(data);
  });
});

Это создаст ваш сервер, прослушивающий порт 43594. Ваш порт можно настроить на любой неиспользуемый порт. Это важная часть, которую вы должны понимать:

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('event', function (data) {
    console.log(data);
  });

Это означает, что когда сервер получает соединение от клиента, сервер выдает объект с именем news со свойством «hello» и значением «world». В зависимости от того, что отправляет клиентский сокет, он также будет консольно регистрировать данные, полученные от него сервером. Чтобы это работало, клиент должен создать «событие». Вот как будет выглядеть клиентская часть:

Убедитесь, что вы сначала установили модуль npm:

npm install --save socket.io-client

Как видите, сначала клиентский сокет подключается к серверу. Затем сокет прослушивает событие на сервере с именем «новости». Когда клиент получит его, он отправит ответ обратно на сервер с именем «event» со свойством «my» и значением «data».

Используя эту связь между клиентом и сервером, разработчики могут как получать, так и отправлять пользовательские события в режиме реального времени. Это может оказаться невероятно полезным для любого приложения реального времени, включая чаты, игры или что-то совместное.

Для получения дополнительной информации о Socket.IO посетите их очень информативный веб-сайт https://socket.io/