Нэнси не может одновременно обслуживать много (<10) одновременных запросов.
Это кричит об общей проблеме с полным iis в ОС Windows, отличной от сервера, в какой версии Windows / iis вы работаете (если вообще)?
Забыл упомянуть: я использую Selfhosting с Microsoft.Owin.Host.HttpListener.
Может в этом проблема?
ОС - Windows 10.
Что было бы лучшим вариантом для самостоятельного размещения?
Лучший вариант использовать nginx для статического контента (или другой http-сервер).
Я согласен с @ Kiri-rin nginx идеально подходит для статического контента, а затем позволяет Нэнси обрабатывать вещи, связанные с api.
Что ж, проблема в том, что у меня также есть нестатический контент, который велик или требует времени для создания.
Я понимаю, что это не обычный вариант использования.
Я исследую это дальше. Было бы здорово, если бы кто-нибудь намекнул, в чем может быть проблема.
@ cody82, если у вас есть длинные маршруты, вы должны сделать их асинхронными, чтобы они не блокировали потоки запросов.
да. Значит ли это, что проблема не в общей обработке HTTP-запросов в Nancy, а в обработчике статических файлов, который неправильно использует async?
Я также столкнулся с той же проблемой в ServiceStack, который выполняет большую часть своей обработки асинхронно, но затем вызывает одну синхронную функцию 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 Я создал PartialFileResponse для приложений потокового видео / аудио: https://gist.github.com/danbarua/0fd9fcad5ec85e0c02dc
Требуется небольшая очистка, но, возможно, его можно объединить с Нэнси или добавить функциональность в GenericFileResponse.
Самый полезный комментарий
Лучший вариант использовать nginx для статического контента (или другой http-сервер).