2012-02-08 12 views
1

io.sockets.clients()のドキュメントを検索しているので、接続しているクライアントのID、ユーザー名などを取得できます。alert(io.sockets.clients().length.toString());は正しい番号を返しますが、配列の構造を見つける。構造を知らずに配列を見つける方法はありますか? PHPのようなものprint_r()Socket.IO接続クライアントリスト

コードこれまでに:「switchRoom」が

/home/ed/socket/chat/node_modules/socket.io/lib/parser.js:81 
data = JSON.stringify(ev); 
      ^
TypeError: Converting circular structure to JSON 
at Object.stringify (native) 
at Object.encodePacket (/home/ed/socket/chat/node_modules/socket.io/lib/parser.js:81:19) 
at Socket.packet (/home/ed/socket/chat/node_modules/socket.io/lib/socket.js:202:21) 
at Socket.emit (/home/ed/socket/chat/node_modules/socket.io/lib/socket.js:351:15) 
at Socket.<anonymous> (/home/ed/socket/chat/app.js:58:10) 
at Socket.$emit (events.js:64:17) 
at SocketNamespace.handlePacket (/home/ed/socket/chat/node_modules/socket.io/lib/namespace.js:331:20) 
at Manager.onClientMessage (/home/ed/socket/chat/node_modules/socket.io/lib/manager.js:436:38) 
at WebSocket.onMessage (/home/ed/socket/chat/node_modules/socket.io/lib/transport.js:387:20) 
at Parser.<anonymous> (/home/ed/socket/chat/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js:38:10) 

答えて

2

発射された後

socket.on('switchRoom', function(newroom){ 
    var clients = io.sockets.clients(); 
    socket.emit('users', clients); 
}); 

socket.on('users', function(usernames) { 
    for(var client in usernames) { 
     console.log(usernames[client].id + ' disconnected: ' +  usernames[client].disconnected) 
    } 
}); 

は、私はあなたが(ブラウザで)、クライアント側またはサーバー側でこれをやっているこのエラーが発生しました?あなたはalertを使用して言及しますが、私はあなたが望むことを行うクライアント側のclients()メソッドを認識していません。 Socket S as defined by this methodの配列を返すclients()サーバ側で

/** 
* Retrieves all clients as Socket instances as an array. 
* 
* @api public 
*/ 

SocketNamespace.prototype.clients = function (room) { 
    var room = this.name + (room !== undefined ? 
    '/' + room : ''); 

    if (!this.manager.rooms[room]) { 
    return []; 
    } 

    return this.manager.rooms[room].map(function (id) { 
    return this.socket(id); 
    }, this); 
}; 

のNode.jsコンソールとブラウザDEVツールでは、デバッグを可能consoleオブジェクトを提供します。一般的に、あなたはconsole.log(something)と呼ぶことができます。somethingほとんど何もありません。オブジェクトの場合は、オブジェクトの詳細が何らかの方法で列挙されます。

[編集]

すでに、おそらくあなたは、このような何か試すことができ、ユーザ名を格納するsocket.setを使用しているので、私は何の深さの多くを表示するために私の現在のコードを追加した

// server 

socket.on('connection', function(socket) { 
    ... 
    socket.on('disconnect', function() { 
    socket.get('username', function (err, name) { 
     socket.broadcast.emit('disconnected', name); 
    }); 
    }); 
    ... 
}); 

// client 

socket.on('connect', function() { 
    ... 
    socket.on('disconnected', function(name) { 
    console.log(name + " disconnected."); 
    }); 
    ... 
}); 
+0

を起こっている。これはサーバ(app.js)上で行われ、何もコンソールにプッシュされません。 –

+0

最初の部分はサーバー上にあり、2番目の部分はクライアント上にあると仮定します。 'io.sockets.clients()'は 'Socket'オブジェクトの配列を返します。インターネット経由でクライアントに送信することはできません。ユーザー名データを取得して、文字列などを送信する必要があります。 'socket.set'を使ってユーザ名を設定していますか?そうでない場合は、どのようにそれらを追跡していますか? –

+0

私は 'socket.set( 'username'、 'MyName')'と 'socket.set( 'id'、socket.id)'を使用して、設定されたvarsを取​​得し、 '.emit'をクライアント? –

関連する問題