我目前正在开发一个基于node.js的socket.io服务,该服务利用node.js集群模块在同一台机器上生成多个node.js处理器。
socket.io文档表示,如果使用多个进程,则需要使用适配器,因此,例如广播目标不仅是连接到当前进程的客户端,而且是每个进程的所有连接客户端。
发布于 2016-08-10 17:07:32
这是对你问题的迟答(一年后).我相信你已经想好了,但是如果其他人只是在学习的话.
socket.broadcast.emit将与所有套接字通信,但发送套接字除外。
io.sockets.emit将与所有套接字通信。
socket.emit将只与该套接字通信
示例:
// Server
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
});
});
// Client 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 );
});注意:(稀疏) http://socket.io/docs/rooms-and-namespaces/也提到了Socket.IO发射器库可以与适配器一起使用.我可以通过多个应用程序实例发送/接收消息,而不需要.我不知道诚实到底有什么好处。
https://stackoverflow.com/questions/32023053
复制相似问题