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
)。 另外, ch1
和ch2
是对sio
引用。
如果你想正确testing,你应该为第二个通道创build第二个套接字:
var sio2 = io.connect('http://localhost:9000'); var ch2 = sio2.emit('subscribe', 'channel2');