私はsocket.io(バージョン:0.8.7)でユーザー間のバイコネクションを管理するnode.jsサーバーを実装しています。私はまだチャットパートナーがいないユーザーを格納する配列を使用します。ユーザーが新しいパートナーをリクエストすると、この配列内のユーザーが選択され、ユーザーがまだ接続されているかどうかが確認されます。そして、ここに私の問題があります:ユーザーのためのソケットクライアントを取得するには?
ユーザーがまだ接続されていても、そのユーザーのソケットクライアントを取得できません。
// An array of users that do not have a chat partner
var soloUsers = [];
var io = sio.listen(app);
io.sockets.on('connection', function (socket) {
socket.on('sessionStart', function (message)
{
// Parse the incoming event
switch (message.event) {
// User requested initialization data
case 'initial':
...
// User requested next partner
case 'next':
// Create a "user" data object for me
var me = {
sessionId: message.data.sessionId,
clientId: socket.sessionid
};
var partner;
var partnerClient;
// Look for a user to partner with in the list of solo users
for (var i = 0; i < soloUsers.length; i++)
{
var tmpUser = soloUsers[i];
// Make sure our last partner is not our new partner
if (socket.partner != tmpUser)
{
// Get the socket client for this user
partnerClient = io.sockets.clientsIndex[tmpUser.clientId];
// Remove the partner we found from the list of solo users
soloUsers.splice(i, 1);
// If the user we found exists...
if (partnerClient)
{
// Set as our partner and quit the loop today
partner = tmpUser;
break;
}
}
}
...
私は次のエラーを取得する:私はのclientIdの出力(にconsole.logを)やった
partnerClient = io.sockets.clientsIndex[clientId];
^
TypeError: Cannot read property 'undefined' of undefined
、それは間違いなくindefinedされる。ここに私のコードの抜粋です。さらに、私はAPIがsocket.ioバージョン0.8で変更されている可能性があり、もう "clientsIndex"メソッドを使用することはできないと考えています。誰かが交換を知っていますか?
ありがとうございました!
partnerClientで達成しようとしていることは何ですか? – alessioalex
パートナーを引き続きユーザーに割り当てる前に、パートナーがまだ接続されていることを確認したい。 –
投稿を編集している間に回答を追加しました。ところで、クライアントの配列をループすることはあまり良くありません。たとえば、クライアント数が10.000の場合、どれほど遅いか想像してみてください。これは、Node.jsイベントループをブロックします。 – alessioalex