如何向同一用户发出事件,该事件在不同的选项卡或 socket.io 浏览器中打开
How to emit event to same user which is opened in different tabs or browser in 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);
});
请检查这一点或让我找到任何其他解决方案来解决此问题。我希望同一个用户发出在不同的浏览器或选项卡中打开的内容。
我猜您正在尝试向同一用户的所有连接发送消息。这是一种方法:
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);
}
});
});
相关文章:
- 我的单元测试选项是什么
- 如何更改bigquery API中的计费层选项
- 使用Javascript获取所选选项ID
- Selectize.js:如何对整数值的选项进行排序
- 通过js在新选项卡中有条件地打开url
- 按照选项卡索引的顺序循环一个jQuery选择
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 无法在Ionic select中预先选择最后一个选项
- 如何在选项卡上定义属性'的主窗口对象
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 如何使用Socket.io将命令从客户端发送到服务器
- 使用此选项选择父类内部的类
- CKeditor:更改对话框中的默认选择选项
- JQuery覆盖不更改单选选项
- 活动选项卡's源代码-获取变量s值
- 管理socket.io中的多个选项卡(但为同一用户)
- socket.io ON不会断开设备睡眠,关闭浏览器,更改选项卡
- Socket.io 每个浏览器选项卡的 socket.on 触发器
- 如何向同一用户发出事件,该事件在不同的选项卡或 socket.io 浏览器中打开
- express+socket.io+mongoDB的体系结构选项是什么