gpt4 book ai didi

node.js - 无法将套接字存储为数组中的对象

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:11 25 4
gpt4 key购买 nike

我试图将所有连接的套接字存储在一个数组中,如`

var basket = {};

io.sockets.on('connection', function (socket) {
socket.on("register", function(user_profile) {
basket[user_profile.id] = socket.id;
});
socket.on(SEND_INVITE,function(invitation_details){
var to = basket[invitation_details.invitee];
io.sockets.socket(to).emit(RECIEVE_INVITE,invitation_details);
});
});

`

但我不知道代码有什么问题,只有最后加入的客户端被存储在篮子中。请帮助我

最佳答案

这就是我在我创建的项目中完成的方法。我使用用户名作为键,使用 socket.id 作为值。然后在客户端哈希中,我使用 socket.id 作为键,使用套接字作为值。这使我可以根据用户名轻松地向“有效”用户发送消息。

存储套接字详细信息,并发出消息

var validUsers = {};
var clients = {};

io.sockets.on('connection', function (socket)
{
var hs = socket.handshake;
if(hs.session)
{
if(hs.session.username)
{
clients[socket.id] = socket; // add the client data to the hash
validUsers[hs.session.username] = socket.id; // connected user with its socket.id
}
}
...

clients[validUsers[username]].emit('move-story', data);
}

身份验证+获取 session

//Auth the user
io.set('authorization', function (data, accept) {
// check if there's a cookie header
if (data.headers.cookie) {
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];

//Save the session store to the data object
data.sessionStore = sessionStore;

sessionStore.get(data.sessionID, function(err, session){
if(err) throw err;

if(!session)
{
console.error("Error whilst authorizing websocket handshake");
accept('Error', false);
}
else
{
console.log("AUTH USERNAME: " + session.username);
if(session.username){
data.session = new Session(data, session);
accept(null, true);
}else {
accept('Invalid User', false);
}
}
})
} else {
console.error("No cookie was found whilst authorizing websocket handshake");
return accept('No cookie transmitted.', false);
}
});

关于node.js - 无法将套接字存储为数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10634261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com