如何将事件发送到在socket.io中的不同选项卡或浏览器中打开的同一用户?

我通过创造房间发现它可以被执行..但一些地方出了问题。

服务器端:-

var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var users = {}; var rooms = []; http.listen(3000, function(){ console.log('listening on *:3000'); }); io.on('connection', function(socket){ socket.on('Init', function(data){ if(data in users){ var roomName = 'room'+ data; var index = rooms.indexof(roomName); if(rooms.notContain(roomName)){ rooms.push(roomName); var index = rooms.indexof(roomName); users[data].join(rooms[index]); socket.join(rooms[index]); }else{ socket.join(rooms[index]); } }else{ socket.username = data; users[socket.username] = socket; } var indo = rooms.indexof('room'+ data); socket.in(rooms[indo]).emit('hai', data); }); }); Array.prototype.indexof = function(Obj){ return this.indexOf(Obj); } Array.prototype.notContain = function(Obj){ for(i in this){ if(this[i] === Obj) return false; } return true; } 

客户端:-

 var socket = io.connect('http://localhost:3000', { 'forceNew': true}); var userId = '<?php echo $_GET['userId'] ?>'; socket.on('connect', function(){ socket.emit('Init', userId); }); socket.on('hai', function(data){ alert(data); }); 

请检查这个或让我任何其他解决scheme来解决这个问题。 我想要同一个用户发出不同的浏览器或标签打开。

我猜你试图发送一个消息到所有连接是同一个用户。 这是一个方法来做到这一点:

 var user_sockets = {}; io.on('connection', function(socket){ socket.on('Init', function(data){ if (typeof user_sockets[data] === 'undefined') { user_sockets[data] = []; } user_sockets[data].push(socket); for (var i = 0; i < user_sockets[data].length; i++) { var s = user_sockets[data][i]; s.emit('hai', data); } }); });