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