0

IIS7でホストされているデュプレックス音声およびビデオチャットサービスがありますnetTcpBinding。サービスの利用者はSilverlightクライアントです。クライアントはサービスでメソッドを呼び出します:SendVoiceAsync(byte[] buffer)1秒間に10回(100ミリ秒ごと)、サービス また、1秒間に10回クライアントにコールバックします(すべてのコールに応答します)。私はLANでサービスを厳密にテストしましたが、非常にうまく機能します。音声/ビデオバッファをサービスに送信する100回の呼び出しごとに、サービスはその期間に受信した音声バッファを使用して他のクライアントに100回コールバックします。しかし、私がインターネットを介してサービスを利用すると、それはひどく遅くなり、ひどく遅れ、そしてしばしば私にタイムアウトエラーを与えます。HTTPを介して、サーバーへの各呼び出しの約1/10の割合でコールバックが受信されていることに気付きました。したがって、サービスへの100回の呼び出しごとに、サーバーはクライアントに10回コールバックします。 100(LANの場合)またはそれに非常に近いもの。

では、HTTPでサービスが非常に遅くなる原因は何でしょうか。私は、netTcpBindingパフォーマンスを最適化するための構成に関する一般的なガイドラインに従いましたが、LANで利益を得るように見えますが、インターネットではひどいものです。すべてのファイアウォールを無効にし、サービスをホストしているWebサイトが存在するポート4502-4535とポートをサーバーコンピューターに転送しましたが、何かがクライアントのサービスへの応答の送信をブロックしているように感じます。80それが役立つ場合、私のサービスはにConcurrencyMode設定されてMultipleおり、にInstanceContextMode設定されていSingleます。また、私のサービス操作はすべて一方向であり、要求/応答ではありません。

助けてくれてありがとう。

4

1 に答える 1

1

インターネットはLANよりもはるかにノイズが多く困難なネットワークです。パケットが失われたり、別のルーター/スイッチを介して再ルーティングされたりする可能性があり、遅延は一般的にかなり悪いです。

TCPが存在するのはそのためです。TCPは順序付けられた信頼性の高いプロトコルであるため、すべてのパケットが受信者によって確認され、送信されなかった場合は再送信されます。
それに関する問題は、高速にしようとせず、送信されたすべてのデータを送信された順序で取得しようとすることです。

したがって、LANラウンドトリップ時間(RTT)は通常約5〜80ミリ秒であるため、セットアップがLANで機能することは驚くことではありませんが、RTTが250ミリ秒であるインターネットでは失敗します。

データの送信頻度を減らし、順序付けされておらず信頼性が低いがTCPよりも高速なUDPに切り替えることができます。失われたパケットを音声/ビデオ品質のわずかな低下で補うことができるので、UDPはインターネット上の音声/ビデオの標準だと思います。

オンラインゲームにも同じ問題があります。たとえば、元のQuakeはインターネット上でプレイできませんでした。

于 2012-05-28T21:31:12.763 に答える