socket.io отправляет сообщение из одного пространства имен в другое - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь отправить сообщение из одного пространства имен в другое (при подключении).Ниже приведен пример кода, с которым я пытался приблизиться.

[Сервер]

// Namespaces
var users_ns = io.of('/users');
var machines_ns = io.of('/machines');

// Attempt to receive the event on the socket
users_ns.on('connection', function(socket){
    socket.on('test', function(socket){
        console.log('socket test');
    });
});

// Attempt to receive the event on the namespace
users_ns.on('test', function(socket){
    console.log('namespace test');
});

// Emit an event to the 'users' namespace
machines_ns.on('connection', function(socket){
    users_ns.emit('test');
});

[Клиент1]

var socket = io('http://localhost/users');

[Клиент2]

var socket = io('http://localhost/machines');

Есть идеи, почему это не работает?

1 Ответ

0 голосов
/ 09 октября 2018

Код вашего сервера правильный, но возникли некоторые недоразумения.

[сервер]

// Namespaces
var users_ns = io.of('/users');
var machines_ns = io.of('/machines');

// Attempt to receive the event on the socket
users_ns.on('connection', function(socket){
    socket.on('test', function(){
        console.log('socket test');
    });
});


// Emit an event to the 'users' namespace
machines_ns.on('connection', function(socket){
    users_ns.emit('test');
});

Когда вы вещаете на сокеты users_ns, эти события принимаются на стороне клиента, а не на стороне сервера.Так что это правильный код на стороне клиента

[Client1]

var socket = io('http://localhost/users');
socket.on('test',function(){ alert('broadcast received');});

[Client2]

var socket = io('http://localhost/machines');

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

...