2

多くの同時接続を提供する C# で記述された TCP Async ソケット ゲーム サーバーがあります。以下の問題を除いて、他のすべては正常に機能します。

  1. 一部のユーザーの頻繁な切断 (気にしないでください)
  2. 低速接続のユーザーのパフォーマンスの低下

この問題に直面しているユーザーのほとんどは、GSM 接続 (CDMA ベースのポータブル USB ドングル) を使用しており、信号強度が弱いことがよくあります。したがって、基本的に帯域幅はかなり貧弱です。おそらく1秒あたり1KB未満です。

私の質問:接続をより安定させ、接続が遅い場合でもパフォーマンスを向上させるにはどうすればよいですか?

クライアント側とサーバー側で動的TCPバッファを考えていますが、方向の接続ごとにこれを動的に行うことによるオーバーヘッドによるパフォーマンスの低下が正しいかどうかはよくわかりません。

最大データ パケット サイズは 1 KB 未満です。

サーバーとクライアントの現在の TCP バッファ サイズは 16KB です

接続が不十分または遅い場合に C# で安定した anync ソケット コードを記述する方法に関するポインタまたは参照は、非常に役立ちます。前もって感謝します。

4

1 に答える 1

2

「パフォーマンス」は非常に相対的な用語です。あなたの主な関心事はデータ転送速度にあるようです。残念ながら、低帯域幅の接続を考えると、それについて多くを行うことはできません-データ圧縮が役立つかもしれませんが、実際の効果はデータに依存し、転送速度の向上と圧縮/解凍の遅延の間には常にトレードオフがあります。あらゆる種類のインタラクティブゲームを検討するための待ち時間もあります。

@Pierreがコメントで示唆しているように、トランスポートにUDPを検討することもできますが、これはパケット損失と並べ替えを許容できる場合にのみ機能します。これもデータとその処理方法によって異なります。

調査することをお勧めするもう1つのアプローチは、2つの異なるサービス品質モードを提供することです。良好なリンク上のクライアントは、完全な機能(たとえば、フル解像度のゲーム画像)を使用できますが、低帯域幅のクライアントは、オプションが少なくなります(たとえば、はるかに小さいサイズの低品質の画像)。クライアント接続/ハンドシェイクで初期ラウンドトリップ時間を測定して、モードを選択できます。

これが少し役立つことを願っています。

于 2012-09-05T20:12:01.890 に答える