2

だから私はiOSアプリを作っていますが、これは一般的なネットワークの問題です.

つまり、私が持っているのは、サーバーとして機能する 1 台の電話であり、多数の電話がクライアントとして電話に接続します。基本的には、ゲーム/音楽の共有者です。

そのセマンティクスを実際に理解するのはちょっと難しいですが、それは重要ではありません。

重要なことは、サーバーとクライアントが TCP 接続を介して互いにコマンドと位置を繰り返し送信しているということです。クライアントはサーバーに音楽ファイル (通常は 4MB) を送信して音楽として再生したい場合があります。

私が最初に遭遇した問題は、大きなファイルを送信するときに、クライアントからサーバーへのコマンドの送信がハングすることでした。

私の素朴な解決策は、サーバーに接続してファイルをサーバーに送信するための別のソケットを作成することでした。サーバーは新しいソケットのIPをチェックし、既存の接続のIPがある場合は、それに結び付けます接続し、ファイルを受信して​​から、ソケットを切断します。

しかし、これの問題は、ソケットが接続するのに 1 ~ 2 秒の遅延がかかることです。私は、中間者攻撃が発生する可能性があることを認識しています。

この問題に対するよりエレガントな解決策はありますか?

4

1 に答える 1

0

私はあなたのソリューションをナイーブとは呼びません.これは主にFTPがどのように機能するかであり、データと制御パスを分離することは私の見解では良い設計パターンです.

真ん中の人なら気にならない。必要に応じて、サーバーが提供するシークレットを使用してデータ接続を介して応答するコマンドをクライアントに追加できます。これにより、IP アドレスを使用せずに接続を関連付けることができます。

遅延が問題になる場合は、開始時に両方の接続を確立しない理由はありません。オペレーティング システム上のいくつかの tcp 接続のオーバーヘッドは、通常は重要ではありません。

コマンドとデータの両方に 2 つの接続を交互に使用することもできます。サーバーとクライアントの両方が接続がビジー状態であることを認識しているため、アイドル状態の接続を使用することを選択できます。これの利点は、両方の接続がビジー状態に保たれ、両方が機能していることを確認できることです。

おそらく、ソケットごとに異なるスレッドを使用する必要がありますが、そうしないとうまく機能しないため、これを行っていると思われます。

于 2013-09-11T19:44:10.077 に答える