socket.io将消息从一个名称空间发送到另一个名称空间

时间:2018-10-08 20:52:56

标签: socket.io namespaces emit

我正在尝试将消息从一个名称空间发送到另一个名称空间(在连接上)。 贝娄是一些示例代码,说明了我如何尝试使用它。

[服务器]

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

[Client1]

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

[Client2]

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

有人知道为什么这行不通吗?

1 个答案:

答案 0 :(得分:1)

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

[服务器]

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

当一个套接字连接到计算机名称空间时,所有连接到用户名称空间的客户端都将发出“广播已接收”警报。