0

チャットアプリケーションが必要なプロジェクトに取り組んでいます。ここでnode.js/websocketバージョンをテストすることにしました:http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial

すべてが完璧に機能しますが、チュートリアルの最後で彼が述べているように:

Apacheとは異なり、Node.jsは接続ごとにプロセスを使用しません。

これは、7人のユーザーがログインした後、ハードコードされたすべての色が使用され、ユーザー名のスタイルに白色が使用されることを意味します。

// Array with some colors
var colors = [ 'red', 'green', 'blue', 'magenta', 'purple', 'plum', 'orange' ];
// ... in random order
colors.sort(function(a,b) { return Math.random() > 0.5; } );

 userName = htmlEntities(message.utf8Data);
 // get random color and send it back to the user
  userColor = colors.shift();
  connection.sendUTF(JSON.stringify({ type:'color', data: userColor }));
  console.log((new Date()) + ' User is known as: ' + userName
          + ' with ' + userColor + ' color.');

2人のユーザーが同じ色を使用できるようにすることはどういうわけか可能ですか?ありがとう

4

3 に答える 3

1

リクエストごとにランダムに色を選択することをお勧めします(つまり、色の配列を事前にシャッフルする必要はありません)。はい、それは時々2人の連続したユーザーが同じ色を得るということを意味します。これは、人々が誤ってランダム性を想像するものではなく、実際のランダム性の固有の特性です。

于 2012-09-09T15:33:00.340 に答える
0

Array.shift()は、colors配列から要素を削除するため、使用しないでください。基本的に、7ユーザーを超えると、配列は空になります。

ランダムなIDを生成するだけです

var idx = Math.floor(Math.random()*colors.length)
.....
({ type:'color', data: colors[idx] })
于 2012-09-09T16:51:28.907 に答える
0

行った後:

usercolor = colors.shift();

次の行を追加します。

colors.push(usercolor);

これにより、返された色がもう一方の端の配列に戻されます。最終的な結果は、7色を何度も循環することです。

于 2012-09-09T17:34:59.873 に答える