0

接続されているすべてのソケットを ` のような配列に格納しようとしています

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);
    });
});

`

しかし、コードの何が問題なのかわかりません。最後に参加したクライアントだけがバスケットに保存されています。お願い助けて

4

1 に答える 1

4

これは私が作成したプロジェクトでそれを行った方法です。キーとしてユーザー名を使用し、値としてsocket.idを使用しました。次に、クライアントハッシュで、socket.idをキーとして使用し、socketを値として使用しました。これにより、ユーザー名に基づいて、「有効な」ユーザーに非常に簡単にメッセージを送信できます。

ソケットの詳細を保存し、メッセージを送信します

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); 
}

認証+セッションの取得

//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);
  }
});
于 2012-05-17T11:56:39.420 に答える