3

socket.emitが配列を送信しないという問題が発生しました。

クライアントがそれを受け取ったとき、それは完全に空です。

サーバ側:

var connectedUserNames = new Array() ;
socket.on('USER_ONLINE', function(data){
    connectedUserNames[socket.id] = data ;
    console.log(data+' has connected.') ;
})
io.sockets.emit('CONNECTED_USERS', connectedUserNames);

クライアント側:

socket.on('CONNECTED_USERS', function(data){alert(data);
    $('#connectedusers').attr('title', data) ;
})

これはNodeJSのバグですか?もしそうなら、どうすればこれを回避できますか?

4

1 に答える 1

5

ご注文は非常にずれているようです。CONNECTED_USERSイベントの外のどこかで放出するUSER_ONLINEため、データで満たされていない可能性があります。ちなみに、あなたは宣言しますArrayが、プレーンオブジェクトのようにアクセスします。インデックス付き配列が必要ない場合は、プレーンを作成するだけです。Object

var connectedUserNames = {};

またはArray.prototype.push、より便利なを使用します

connectedUserNames.push( data );

この線を引いてみてください

io.sockets.emit('CONNECTED_USERS', connectedUserNames);

イベントに参加しUSER_ONLINE、クライアントが実際にそのイベントをある時点で発生させることを確認してください。これにより、サーバーはそれに反応できます。

于 2012-09-18T10:33:38.057 に答える