0

チャット ルーム タイマーのソリューション (nodeJS + socket.io + redis) を選択するのを手伝ってください。

複数のルームが作成され、すべてのルームには 1 つのホスト、つまりそのルームの管理者がいて、すべてのルームには 500 人のメンバーがいます。't' の時点で 'n' 個の部屋が存在する可能性があります。ルームは作成から 1 時間後に破棄されます。

ノードサーバー => redis からのルームのメンバー関連データを処理し、一定間隔ですべてのルームにブロードキャストします。この間隔 (つまり、いつブロードキャストするか) は、配列によって決定されtimerArrayForRoom1ます。この配列は、データをブロードキャストする時間を秒単位で保持します。この配列は部屋ごとに異なります。

さて、2つのアプローチ -

  1. nodeJS で setInterval() を使用して、一定の時間間隔の後にブロードキャスト メソッドを呼び出すようにします。すべての部屋には個別の間隔オブジェクトがあります。

  2. 部屋のホストに渡しtimerArrayForRoom1、タイマー配列に従って数秒後にホストにイベントを発生させます。つまり、クライアント側で setinterval() を使用します。ノードサーバーはそのイベントに対してアクションを実行します。

最初のアプローチは HOST に依存しませんが、NodeJS で setInterval() を使用する必要があります。

サーバーが 500 のメンバーを含む 1000 のルームをサポートできるようにするには、どれを実装するのがよいでしょうか?

どちらがより信頼できますか? (私が読んだように、 setInterval() は関数を呼び出す時間を保証しません)

または他のアプローチ?

ホスト/管理者は異なるデバイスで、すべての部屋に正確に 1 つあるため、2 番目のアプローチはサーバーの負荷をある程度分散させます。

4

1 に答える 1

0

setIntervalあなたのノードサーバーから行くのが道です。クライアントから独立しているという正当な理由をすでに示しています。また、実行時間が保証されない場合もあります。これは、ontime の実行に最も近いものです。

これは、CPU の集中的な実行のためにサーバーがハングアップしない限り、かなり正確に機能するはずです。また、HOST またはその他のクライアントがイベントを開始できるようにすることも、同じ欠点の影響を受けやすくなります。

于 2013-11-05T07:20:35.633 に答える