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' 警报。
我正在尝试从一个命名空间向另一个命名空间发送消息(在连接时)。 下面是一些示例代码,说明我是如何尝试处理它的。
[服务器]
// 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' 警报。