1

次の図のような橋を作る必要があります。これは、クライアントからパケットを受信し、それを別のサーバーに転送する単なるUDPサーバーです。シナリオは図によってよく理解されます。

+--------+sendto()  recvfrom()+-----------+                    
| client |------------------->|           |                         +-------------+  
|        |        1           | bridge    |sendto()      recvfrom() |             |
|        |                    |           |------------------------>|    duty     |
|        |                    |           |           2             |   server    | 
|        |                    |           |recvfrom()      sendto() | processing  |   
|        |                    |           |<------------------------|             |
|        |recvfrom()  sendto()|           |            3            |             |
|        |<-------------------|           |                         +-------------+  
+--------+         4          +-----------+                     

ここでは、データを送受信する機能がデバイスの側面に沿って書き込まれています。通信プロセスは、矢印記号の下の番号1、2、3、および4で識別されます。上から下へとタイムラインを表現できるように図を描いてみました。

今、要点に来てください。管理するクライアントが1つしかない場合、それを行うのは非常に簡単な作業です。しかし、クライアント数が多くなる可能性があると仮定しましょう。クライアントがダイヤラを使用してインターネットに接続されている電話であり、サーバーがAsterisk/Freeswitchなどを実行しているSIPサーバーであるとします。このようなシナリオでは、多くのクライアントが存在する可能性があります。通信を効率化するために、ブリッジサーバーをプロキシサーバー(kamailioとrtpproxyを実行)として使用したくありません。

アスタリスクまたはSIPサーバーは、私が知っているudpセッションを管理できます。しかし、どうすれば橋を架けることができますか。udpはセッションを維持しないので、どうすれば4番目のステップを完了することができますか。クライアントのデューティサーバーの応答を特定するにはどうすればよいですか?セッションを処理するために、どのタイプのソフトウェア(もちろん効率のために軽量であり、私自身もそれを作成する必要があります)を作成する必要があります。誰かがudpを介してセッション管理のアイデアを私に与えることができれば、それは私にとって非常に役に立ちます。たくさん検索しましたが、適切な答えが見つかりませんでした。

前もって感謝します。

4

1 に答える 1

1

TCP/UDPトラフィックの一般的なプロキシ実装で使用したアルゴリズムは次のとおりです。

プログラムモジュール:

1つの接続クリエーターと複数のプロキシワーカー

それらは自己完結型のスレッドとして実装されます。

フロー:

Creatorモジュールは、新しい接続を受け入れて処理する責任があります。これは、初期データを通知して、その接続のすべてのI / Oでそのポイントから処理するワーカーに渡します。並行して、反対側への接続を開きます(ワーカーでも実行できます)。

ワーカーは接続を取得し、そのライフサイクル中にそれを担当します。

いくつかの技術的ポイント:

UDP接続は、IPとポート(SRCとDEST)によって決定されます。

クリエーターはすべてのソースからのメッセージを待つことができますが、ワーカーは特定のソースからのメッセージを待つことができます(UDPソケットをバインドすることにより)。

パフォーマンスのために、ワーカーはシステムが持つコアの数に適合し、それぞれが非同期ソケットを処理できるようにする必要があります。さらに、ワーカーが複数のソケットを処理する場合、作成者/ボスが新しい接続を配布するときにワーカー間の負荷分散を行うためのアルゴリズムを配置する必要があります。

于 2012-04-18T16:50:08.060 に答える