2016-10-25 2 views
-1

私の目的は、独自のTCP/IPまたはISO/OSIスタックでWebSocketを使用することです。 WebSocketが接続を確立した1台のサーバーでのみ動作することがわかっているので、クライアントからアプリケーションサーバーへのすべての要求の負荷を分散したい。私は1つのノードに接続し、任意のノードに要求を送信できるようにしたい。毎回ハンドシェイクを使わずにWebSocketを使用する独自のTCP/IPまたはISO/OSIスタックを作成するには?

アルゴリズムは次のとおりです。
1.クライアントはロードバランサの背後にあるノードのいずれかとの接続を確立します。
2.クライアントはWebSocket経由でロードバランサにデータを送信します。
3.ロードバランサはデータを受信し、任意のサーバーに送信します。
4.サーバーはデータを確認し、アプリケーションに送信します。接続が確立されていない場合でも、サーバーはパケットを破棄せず、アプリケーションにパケットを送信するだけです。

このような状況では、WebSockets要求を簡単にロードバランスできます。私はTCP/IPスタックを書き直す方法を理解しようとし、パケットをユーザー空間のアプリケーションに直接送り込ませましたが、混乱します。

DPDKを使用する必要がありますか?はい、パケットを直接送受信する方法や接続チェックをスキップする方法の最小例を表示できますか?そうでなければ、この状況で何を使用する必要がありますか?

+1

TCP/IPスタックを書き換えますか?それで幸運。あなたが実際の問題を(解決の感覚を記述することなく)記述すれば、もっと実践的な解決法を手伝うことができます。また、これがどのタイプのクライアント(ブラウザ、カスタムコードなど)であり、その能力が何であるかを知る必要があります。 – jfriend00

+0

ご参考までに、既にサーバーに接続されていないアプリケーションにパケットを送信することはできません。 TCPを介して送信するには、コネクションのセンスが必要です。異なるプロパティーや特性を持つUDPなどのプロトコルもありますが、他に何が示唆されるかを知るためには、実際の問題や2つのエンドポイントの制約がありません。 – jfriend00

+0

私はユーザー空間でパケットを処理する必要があります。デフォルトでは、トランスポート層はLinux OSで処理されますが、DPDKはユーザー空間で処理できます。 TCPプロトコルを少し変更したい。それをChanged_TCPと呼ぶことにしましょう。クライアントはブラウザです。しかし、私はどこから始めるべきか分かりません。 – Alexandr

答えて

1

既存のwebSocket接続の負荷をリロードできるようにするには、クライアントコードを数行入力するだけでクライアントに「再接続」メッセージを送信できます。クライアントは現在のwebSocket接続を切断して再接続します新しい接続。

この再接続により、サーバーファームは新しい接続の負荷を再調整できます。

着信webSocket接続は、ロードバランシングで探しているものであるように、「アップグレード」ヘッダーが付いたHTTPリクエストとして有効です。

クライアントとサーバー(webSocketの上にあるメッセージングレイヤー)でsocket.ioを使用すると、自動的に再接続されるため、サーバーで接続を切断してもsocket.ioは自動的に再接続します。新しいクライアントコード。

関連する問題