Учебники

Socket.IO — Пространства имен

Socket.IO позволяет вам «именовать» свои сокеты, что по сути означает назначение разных конечных точек или путей. Это полезная функция, позволяющая минимизировать количество ресурсов (TCP-соединений) и в то же время разделять проблемы в вашем приложении за счет разделения каналов связи. Несколько пространств имен фактически используют одно и то же соединение WebSockets, что позволяет нам сэкономить порты сокетов на сервере.

Пространства имен создаются на стороне сервера. Однако к ним присоединяются клиенты, отправляя запрос на сервер.

Пространства имен по умолчанию

Корневое пространство имен «/» является пространством имен по умолчанию, к которому присоединяются клиенты, если клиентское пространство не указывает пространство имен при подключении к серверу. Все подключения к серверу с использованием клиентской стороны объекта сокета выполняются в пространстве имен по умолчанию. Например —

var socket = io();

Это подключит клиента к пространству имен по умолчанию. Все события в этом соединении пространства имен будут обрабатываться объектом io на сервере. Все предыдущие примеры использовали пространства имен по умолчанию для связи с сервером и обратно.

Пользовательские пространства имен

Мы можем создать наши собственные пространства имен. Чтобы настроить собственное пространство имен, мы можем вызвать функцию ‘of’ на стороне сервера —

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

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

var nsp = io.of('/my-namespace');
nsp.on('connection', function(socket) {
   console.log('someone connected');
   nsp.emit('hi', 'Hello everyone!');
});

http.listen(3000, function() {
   console.log('listening on localhost:3000');
});

Теперь, чтобы подключить клиента к этому пространству имен, вам необходимо предоставить пространство имен в качестве аргумента для вызова конструктора io, чтобы создать соединение и объект сокета на стороне клиента.

Например, чтобы подключиться к указанному выше пространству имен, используйте следующий HTML —

<!DOCTYPE html>
<html>
   <head>
      <title>Hello world</title>
   </head>
   <script src = "/socket.io/socket.io.js"></script>
   
   <script>
      var socket = io('/my-namespace');
      socket.on('hi',function(data) {
         document.body.innerHTML = '';
         document.write(data);
      });
   </script>
   <body></body>
</html>

Каждый раз, когда кто-то подключается к этому пространству имен, он получает событие «привет».