私の目的は、独自のTCP/IPまたはISO/OSIスタックでWebSocketを使用することです。 WebSocketが接続を確立した1台のサーバーでのみ動作することがわかっているので、クライアントからアプリケーションサーバーへのすべての要求の負荷を分散したい。私は1つのノードに接続し、任意のノードに要求を送信できるようにしたい。毎回ハンドシェイクを使わずにWebSocketを使用する独自のTCP/IPまたはISO/OSIスタックを作成するには?
アルゴリズムは次のとおりです。
1.クライアントはロードバランサの背後にあるノードのいずれかとの接続を確立します。
2.クライアントはWebSocket経由でロードバランサにデータを送信します。
3.ロードバランサはデータを受信し、任意のサーバーに送信します。
4.サーバーはデータを確認し、アプリケーションに送信します。接続が確立されていない場合でも、サーバーはパケットを破棄せず、アプリケーションにパケットを送信するだけです。
このような状況では、WebSockets要求を簡単にロードバランスできます。私はTCP/IPスタックを書き直す方法を理解しようとし、パケットをユーザー空間のアプリケーションに直接送り込ませましたが、混乱します。
DPDKを使用する必要がありますか?はい、パケットを直接送受信する方法や接続チェックをスキップする方法の最小例を表示できますか?そうでなければ、この状況で何を使用する必要がありますか?
TCP/IPスタックを書き換えますか?それで幸運。あなたが実際の問題を(解決の感覚を記述することなく)記述すれば、もっと実践的な解決法を手伝うことができます。また、これがどのタイプのクライアント(ブラウザ、カスタムコードなど)であり、その能力が何であるかを知る必要があります。 – jfriend00
ご参考までに、既にサーバーに接続されていないアプリケーションにパケットを送信することはできません。 TCPを介して送信するには、コネクションのセンスが必要です。異なるプロパティーや特性を持つUDPなどのプロトコルもありますが、他に何が示唆されるかを知るためには、実際の問題や2つのエンドポイントの制約がありません。 – jfriend00
私はユーザー空間でパケットを処理する必要があります。デフォルトでは、トランスポート層はLinux OSで処理されますが、DPDKはユーザー空間で処理できます。 TCPプロトコルを少し変更したい。それをChanged_TCPと呼ぶことにしましょう。クライアントはブラウザです。しかし、私はどこから始めるべきか分かりません。 – Alexandr