0

つまらないタイトルで申し訳ありませんが、より良いタイトルを見つけるのに15分間苦労した後、私はただあきらめました。
次のシナリオを想像してください。

  • AC# で記述されたデスクトップ アプリは、ユーザーの会話をリッスンし、スピーチが行われているWAVときにファイルをチャンク ( byte[])に変換します。
  • A次に、スピーチがまだ行われているため、これらのチャンクをサーバーB(Windows サーバー)に送信する必要があります。
  • サーバーBはすべてのチャンクが到着するのを (音声の完了時に) 待機し、向きを変えて、音声の完全な表現を使用して、サーバーC(サード パーティの音声からテキストへのレコ エンジン)に対して 1 つの HTTP POST を作成します。byte[]
  • サーバーBは応答を取得し、結果の文字列を処理してから、オブジェクトをデスクトップ アプリに送り返しますA(文字列または画像の可能性があります)。

要件の 1 つ (太字のステートメント) は、効率を高めるためにA、チャンクの への送信を開始する前にスピーチが完了するのを待つべきではないということBです。

TCP ソケットを使用するテスト ソリューションをまとめました (正常に動作するようです) が、ソケットを使用した経験がほとんどないため、少し気が進まない (すべての制限について確信が持てない)。

私たちの目的を達成するためのより良い提案はありますか?

PS: まだ確認が必要なもう 1 つの要件は、A「管理されていない」C++ で記述されている可能性があるため、純粋な .NET 実装 (WCF の二重サービスなど) を妨げる可能性があります。

4

2 に答える 2

0

いくつかの変更を加えることが考えられ、クライアント/サーバーのパフォーマンスが向上すると思います。

まず、from toを送信してすべてのチャンクが送信されるのを待つのではなく、from toを送信してbyte[]からA、すべてのパケットが送信されるのを待つ必要があります。 Bbyte[]AC


これが役立つはずの図です:

A -> C (waits for all packets) -> B (does some stuff to the string) -> A


また、サーバーが必要ない場合はB、次のようにすることができます。

A -> C (waits for all packets, then does some stuff to the string) -> A


現在行っていることは次のとおりです。

A -> B (waits for all packets) -> C -> B (does some stuff to the string) -> A

最初のアイデアでは、パケットを3回だけ送信し、2番目のアイデアでは2回だけ送信しますが、実装の場合と同様に、パケットを4回送信します。パケットを送信する回数はすべての場合に関係ありませんが、必要なため、これで送信されると思いますon-the-fly。したがって、送信するパケットが少ない=応答が速くなります。

これがあなたに役立つか、あなたにアイデアを与えることを願っています!

于 2012-06-02T03:44:36.700 に答える
0

厄介なネットワークの詳細をすべて処理するネットワーク ライブラリを作成しました (高速で非同期です)。

送受信する情報を管理するだけです。

ここに紹介があります: http://blog.gauffin.org/2012/05/griffin-networking-a-somewhat-performant-networking-library-for-net/

于 2012-06-05T11:01:03.573 に答える