首先,这是我的代码:
var users = {};
//User Connect
io.sockets.on('connection', function (socket) {
socket.emit('connected');
socket.on('session', function (session){
users[socket.id] = [session, socket];
console.log(users);
socket.emit("session_established");
//User Disconnect
socket.on('disconnect', function (){
delete users[socket.id];
socket.broadcast.emit('disconnect', { data : session});
});
//The above all works as it should, now here it what I want to do:
socket.on('chatMessage', function (message, userID) {
users[userIDsSocket][userID].emit('chatMessageResponse', { data: message});
});
});
});
这是我的数据的样子,(这适用于一个用户):
{ '17819180631362480757': //this value is users[socket.id]
[ '1', //this value is session at the top, and in the bottom part userID
{ id: '17819180631362480757', //The rest of this is the socket data
namespace: [Object],
manager: [Object],
disconnected: false,
ackPackets: 0,
acks: {},
flags: [Object],
readable: true,
store: [Object],
_events: [Object] } ] }
所以这就是我需要做的事情(只是用它应该如何运作的英语术语):
哦,首先,如果用户在多个选项卡/计算机/设备中打开了窗口,则可以有多个userID / Session相同,因此需要将其发送到具有相同userID的每个套接字
socket.on('chatMessage', function (message, userID) {
for each (users[*].userID==userID)
{
users[*][userID].emit('chatMessageResponse', { data: message});
}
});
所以我不知道如何忽略socket.id(我在哪里放置[*]
答案 0 :(得分:1)
更改为:
users[socket.id] = {userID:session, socketID:socket};
然后:
for (var key in users)
{
if (users[key].userID==userID)
{
users[key].socketID.emit('new_request_response', { data: message});
}
}
答案 1 :(得分:0)
我认为您可能需要for in
循环,条件为if
。
socket.on('chatMessage', function (message, userID) {
for (var key in users)
if (users[key].userId==userId)
users[key][userId].emit('chatMessageResponse', { data: message});
});
答案 2 :(得分:0)
这是我的代码。
var io = require('socket.io').listen(15630);
var clients = [];
var coupling = [];
io.sockets.on('connection', function (socket) {
clients[socket.id] = socket;
socket.on('setUserID', function (userID) {
socket.set('userID', userID, function () {
coupling[userID] = socket.id;
});
});
for (var client in io.sockets.clients()) {
console.log(client);
}
socket.on('send', function (from,to,message)
{
var sender = 0;
socket.get('userID', function (err, name) {
sender = name;
});
var userSocket = clients[coupling[to]];
if(userSocket != null || userSocket != undefined)
userSocket.emit('message', {from :from,to : to,message:message});
});
socket.on('disconnect', function () {
var sender = 0;
socket.get('userID', function (err, name) {
sender = name;
});
delete clients[coupling[sender]]
//var userSocket = clients[coupling[sender]];
//if(userSocket != null || userSocket != undefined)
//clients[coupling[sender]] = null;
});
});