我使用node.js和socket.io。
我的mysql表中有这个数据结构:
TABLE USERS:
Id: 1, Name: 'ABC1', ToUserId: 1
Id: 2, Name: 'ABC2', ToUserId: 1
Id: 3, Name: 'ABC3', ToUserId: 1
Id: 4, Name: 'ABC4', ToUserId: 2
Id: 5, Name: 'ABC5', ToUserId: 2
Id: 6, Name: 'ABC6', ToUserId: 2
Id: 7, Name: 'ABC7', ToUserId: 3
我想将行(ID1 - ID3)作为集合发送给具有UserId 1的用户 和UserId 2的用户行(ID4 - ID6) 和UserId 3的用户行(ID7)。
如何创建集合并将集合发送给用户?
我读的数据如下:
getUsers: function(callback)
{
client.query(
'SELECT * FROM users',
function select(err, results, fields) {
if (err) {
throw err;
}
var userslist = {};
if (results.length > 0) {
for (var i = 0; i < results.length; i++) {
var row = results[i];
//Create colletion in object userslist
//Emit to specific user ------v
//io.sockets.socket(USER_ID).emit('sendusers', userslist )
}
}
else
{
userslist = {};
}
callback(userslist);
}
);
}
答案 0 :(得分:2)
您需要存储套接字ID和用户ID之间的关联。
在您的客户端上,您需要发出当前用户的USER_ID。
像
这样的东西socket= io.connect();
socket.on('connect', function(data){
socket.emit('init', user_id);
});
在您的服务器上需要设置user_id。你可以做点什么
io.sockets.on('connection', function(socket) {
socket.on('init', function(data) {
socket.set('user_id', data, function(){
console.log('user_id', data);
});
});
});
然后在您的控制器中,您可以检索所有套接字并循环遍历它们。
//to get all connections
var sockets = io.sockets.clients();
//to get the user_id associated with the socket
socket.get('user_id', function(err, user_id){
//do whatever you want!
//ex: if(user_id == ...){ socket.emit('channel', 'value'); }
});
希望有所帮助!