0

私は分散チャットシステムを実装しています。このシステムには次のオプションがあります。

  1. 各ノードで実行されているクライアントとサーバーを別々のスレッドとして実行します。受信者として機能するサーバーはデーモンスレッドとして実行され、クライアントはユーザー入力を通常のスレッドとして受け取ります。

  2. クライアント用とサーバー用の2つのプロセスをフォークします。

どちらを先に進めるかを推論することはできません。どんな洞察も素晴らしいでしょう!

4

2 に答える 2

1

データを受信して​​正しいキューに入れるスレッドにn個のワーカー、クライアントにデータをプッシュするm個のワーカー、キューからデータを処理するk個のワーカーを作成するだけで、「スケーラブル」な方法でそれを行うことができます。

nデータを取得するワーカーmワーカーがデータをプッシュするkワーカーがデータを処理して状態を追跡する着信メッセージque発信メッセージque

このようにして、最適な(n、m、k)を見つけることができます。ここでの唯一の問題は、バグなしで実装するのは簡単ではないということです。潜在的に、ワーカータイプの数を2つに減らすことができます。着信メッセージとプロセス+プッシュしてredis(redis.io)のリストをキューとして使用します。しかし、それでもこれには多くのテストカバレッジが必要になります:)頑張ってください

実際には、これにWebSocketを使用できます。socket.iohttp://socket.io/またはfayehttp : //faye.jcoglan.com/のようなもの

そして、チャットの最前線を作成するだけです:)これにより、ほとんどの問題が非常にスケーラブルで使いやすい方法で解決されます。

于 2012-04-14T19:49:17.797 に答える
0

どちらも同じように悪いです。あなたは実際にI/Oで多重化したいのです。Erlangではこれは簡単です。Erlangでプログラムする唯一の方法です。Pythonでは、Twistedまたはgeventなどを使用できます。RubyにはEventMachineがあります。JavaにはNIOがあります。Cにはlibevがあります。等。

于 2012-04-13T23:27:48.527 に答える