2017-07-18 26 views
2

我是新来的节点和套接字io。我正试图为我自己的应用程序实现一个实时通知系统。因此,使用节点,快递和插座IO,代码如下: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);是工作荷兰国际集团,但它的数据发送到两个房间/通道,但我期待仅在ch1因为data1.channel包含channel1所以我期待下面的处理程序将接收到的数据来获取数据:

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

注意,两个通道有同样的log事件。我在正确的轨道上吗?它有可能吗?

+0

您在data1'的'声明拼写错误'channel'。 – robertklep

+0

这是一个错字,但它也不起作用。 –

回答

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

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

如果你要正确地测试它,你应该为第二信道的第二座:

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

您想要创建多个套接字,其中每个套接字订阅不同的房间,但所有套接字共享相同的连接?那是对的吗? – robertklep

+0

是的,确切的!!! –

+0

通过调用'sio2 = io.connect('http:// localhost:9000')'可行,但这些是两个不同的连接。 –