socket.io 从一个命名空间向另一个命名空间发出消息

socket.io emit message from one namespace to another

我正在尝试从一个命名空间向另一个命名空间发送消息(在连接时)。 下面是一些示例代码,说明我是如何尝试处理它的。

[服务器]

// 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');

知道为什么这不起作用吗?

您的服务器代码是正确的,但发生了一些误会。

[服务器]

// 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 套接字广播时,此事件在客户端接收,而不是在服务器端接收。所以这是正确的客户端代码

[客户端 1]

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

[客户端2]

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

当一个套接字连接到机器命名空间时,所有连接到用户命名空间的客户端都会引发 'broadcast received' 警报。