複数のクライアントとデューティサーバ間の中間ブリッジサーバのUDPを介したセッション管理方法 - linux、ネットワークプログラミング、udp

私は次の図のような橋を作る必要があります。これは、クライアントからのパケットを受信し、別のサーバに転送する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を通してセッション管理のアイデアを与えることができれば、それは私にとって非常に役に立ちます。私は多くを検索しましたが、適切な答えは見つかりませんでした。

前もって感謝します。

回答:

回答№1は1

ここでは、TCP / UDPトラフィック用の汎用プロキシ実装で使用したアルゴリズムを示します。

プログラムモジュール:

1人のConnection Creatorと複数のプロキシワーカー

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

フロー:

クリエイターモジュールは、新しい接続を処理します。それは、最初のデータを通知して、その接続のすべてのI / Oでその時点から処理するワーカーに渡します。同時に、他の側への接続も開きます(ワーカーでも可能です)。

労働者は、そのライフサイクルの間に接続し、その責任を負うことになります。

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

UDP接続は、IPおよびPORT(SRCおよびDEST)によって決定されます。

作成者はすべてのソースからのメッセージを待つかもしれませんが、ワーカーは特定のソースからのメッセージを待つかもしれません(UDPソケットをバインドすることによって)。

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


関連する質問
メニュー
最も人気のある