這是一個遲到的回答你的問題(一年後)......我敢肯定,你現在想通了,但如果其他人只是學習遇到這...
1 )怎麼做,如果你想在多個node.js的進程發送同一臺機器上的郵件需要一個適配器(socket.io-Redis的)。目前還沒有其他的方式來管理在不同的應用程序實例的多個插座,有時不能保證客戶端連接到同一個實例,而使用的應用程序,以便該適配器爲您管理該套接字連接信息。
2)您可以編寫套接字來進行通信,但是一旦適配器就位,您就可以進行通信(假設您的庫一起工作良好 - see my related question)。
io.broadcast.emit
將傳達給所有插座除了發送插座
io.sockets.emit
將傳達給所有插座
socket.emit
將溝通只是插座
例子:
服務器
var redisPort = 6379
var io = require('socket.io');
var redisAdapter = require('socket.io-redis');
io = io.listen(httpServer); //the server instance (supply your own code here)
io.adapter(redisAdapter({ host: 'localhost' , port : redisPort }));//6379
io.on('connection', function(socket){
socket.on('client-msg', function(data){
var msgObject = { content : '' , status : 0 };
if(data && data.content){
msgObject.content = data.content;
msgObject.status = 1;
}
io.emit('server-response', msgObject);//send to all sockets
socket.emit('server-response', msgObject);//send to this socket
socket.broadcast.emit('server-response', msgObject); //send to all other sockets but not this one
});
socket.on('disconnect', function(data) {
//do some stuff unrelated to emitting
});
});
客戶
var socketio = io.connect(window.location.origin , { transports : ['websocket'] });
socketio.emit("send-message" , { content : msg });
socketio.on("server-response", function(data) {
console.log(data.content , data.status);
});
注*的(疏)socket.io docs也提到一個socket.io發射體庫可以與適配器一起使用......我能發送/接收跨多個應用實例的消息沒有如此。 ..我不確定什麼是誠實的。
發射器用於沒有實例化的socket.io服務器,前點的過程。爲純粹的工作者 – Climax