Nancy: 多くの同時リクエスト

作成日 2016年04月16日  ·  9コメント  ·  ソース: NancyFx/Nancy

説明

ナンシーは一度に多くの(<10)同時リクエストを処理することはできません。

再現する手順

  1. StaticContentsConventionsを追加して、ディレクトリからファイルを提供します。
  2. 長いビデオファイルをディレクトリにコピーします。
  3. すべてをhttp://localhost/myvideo.mp4などにポイントして、ブラウザの多くのタブ(> 10)でビデオを開きます
  4. 観察:ビデオはすべてのタブに表示されるわけではなく、他のタブを閉じるまで接続を待ちます。

    システム構成

  • ナンシーバージョン:1.4.1
  • ナンシーホスト:OWIN
  • ブラウザ:Chrome

最も参考になるコメント

静的コンテンツ(または別のhttpサーバー)にnginxを使用するための最良のオプション。

全てのコメント9件

これは、サーバー以外のWindows OSでの完全なIISに関する一般的な問題の悲鳴ですが、実行しているWindows / IISのバージョン(ある場合)は何ですか?

言及するのを忘れました:私はMicrosoft.Owin.Host.HttpListenerでセルフホスティングを使用しています。
多分それが問題ですか?
OSはWindows10です。
セルフホスティングに最適なオプションは何ですか?

静的コンテンツ(または別のhttpサーバー)にnginxを使用するための最良のオプション。

@ Kiriに同意します-rinnginxは静的コンテンツに最適であり、nancyにAPI関連のものを処理させます。

問題は、静的でないコンテンツが大きいか、生成に時間がかかることです。
ただし、これは一般的な使用例ではないことを理解しています。
これについてはさらに調査します。 誰かが私に問題がどこにあるかについてのヒントを与えることができればそれは素晴らしいでしょう。

@ cody82実行時間の長いルートがある場合は、それらを非同期にして、リクエストスレッドをブロックしないようにする必要があります

はい。 つまり、問題はナンシーでの一般的なHTTPリクエストの処理ではなく、非同期を適切に使用しない静的ファイルのハンドラーにあるということですか?

また、ServiceStackでも同じ問題が発生しました。これは、ほとんどの非同期処理を実行しますが、すべてをブロックする1つの同期Socket.Write関数を呼び出します。

GenericFileResponse.GetFileContentに問題を追跡しました:

c# private static Action<Stream> GetFileContent(string filePath, long length) { return stream => { using (var file = File.OpenRead(filePath)) { file.CopyTo(stream, (int)(length < BufferSize ? length : BufferSize)); } }; }

したがって、File.CopyToは、ファイル/ビデオの転送中にスレッドをブロックします。
(また、このクラスは部分的な応答を処理するために継ぎ目がありませんが、それは別の問題です。)
これを非同期関数に変換できるとは思えませんが、間違っている可能性がありますか?

(また、このクラスは部分的な応答を処理するために継ぎ目がありませんが、それは別の問題です。)

@ cody82ビデオ/オーディオストリーミングアプリケーション用にhttps ://gist.github.com/danbarua/0fd9fcad5ec85e0c02dc

少しクリーンアップする必要がありますが、Nancyにマージされるか、GenericFileResponseに機能が追加される可能性があります。

このページは役に立ちましたか?
0 / 5 - 0 評価