socket.io发射到所有的房间,而不是指定的

我是新的节点和套接字io。 我试图为我自己的应用程序实现一个实时通知系统。 所以,使用node,express和socket io,代码如下:

服务器端代码:

io.on('connection', function (socket) { socket.on('subscribe', function(room) { socket.join(room); }); socket.on('unsubscribe', function(room) { socket.leave(room); }); }); 

客户端代码:

 var sio = io.connect('http://localhost:9000'); var ch1 = sio.emit('subscribe', 'channel1'); ch1.on('log', function (data) { console.log('channel1: ', data); }); var ch2 = sio.emit('subscribe', 'channel2'); ch2.on('log', function (data) { console.log('channel2: ', data); }); 

我从一条路线(快车)发射/发射事件,例如:

 app.get('/', function(req, res) { var data1 = { channel: 'channel1', evennt: 'log', message: 'Hello from channel1...' }; io.to(data1.channel).emit(data1.event, data1); }); 

当我点击路由时, io.to(data1.channel).emit(data1.event, data1); 正在工作,但它将数据发送到两个房间/渠道,但我期待获取数据只在channel1 ch1因为data1.channel包含channel1所以我期待以下处理程序将收到的数据:

 ch1.on('log', function (data) { console.log('channel1: ', data); }); 

注意,两个通道都有相同的log事件。 我在正确的轨道上。 有没有可能?

 var ch1 = sio.emit('subscribe', 'channel1'); var ch2 = sio.emit('subscribe', 'channel2'); 

您正在向两个房间订阅相同的套接字( sio )。 另外, ch1ch2是对sio引用。

如果你想正确testing,你应该为第二个通道创build第二个套接字:

 var sio2 = io.connect('http://localhost:9000'); var ch2 = sio2.emit('subscribe', 'channel2');