2017-07-18 63 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')'可行,但這些是兩個不同的連接。 –