Nancy kann nicht viele (<10) gleichzeitige Anforderungen gleichzeitig bedienen.
Dies schreit nach einem häufigen Problem mit vollständigem iis auf Nicht-Server-Windows-Betriebssystemen. Welche Version von Windows/iis verwenden Sie (wenn überhaupt)?
Vergessen zu erwähnen: Ich verwende Selfhosting mit Microsoft.Owin.Host.HttpListener.
Vielleicht ist das das Problem?
Betriebssystem ist Windows 10.
Was wäre die beste Option für Selfhosting?
Die beste Option, um nginx für statische Inhalte (oder einen anderen http-Server) zu verwenden.
Ich stimme @Kiri-rin zu nginx ist perfekt für statische Inhalte und überlasse dann Nancy API-bezogene Dinge.
Nun, das Problem ist, dass ich auch nicht statischen Inhalt habe, der groß ist oder einige Zeit braucht, um ihn zu generieren.
Ich verstehe jedoch, dass dies kein häufiger Anwendungsfall ist.
Ich werde das weiter untersuchen. Wenn mir jemand einen Tipp geben könnte wo das Problem liegen könnte wäre das super.
@cody82 Wenn Sie lange laufende Routen haben, sollten Sie sie asynchron machen, damit sie die Anfrage-Threads nicht blockieren
Ja. Bedeutet das, dass das Problem nicht in der allgemeinen HTTP-Anforderungsbehandlung in Nancy liegt, sondern im Handler für statische Dateien, der asynchron nicht richtig verwendet?
Ich habe auch das gleiche Problem in ServiceStack erlebt, der die meisten seiner Behandlungen asynchron erledigt, aber dann eine synchrone Socket.Write-Funktion aufruft, die alles blockiert.
Ich habe das Problem zu GenericFileResponse.GetFileContent verfolgt:
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 blockiert also den Thread, während die Datei/das Video übertragen wird.
(Auch diese Klasse scheint nicht mit Teilantworten umzugehen, aber das ist ein anderes Problem.)
Ich bezweifle, dass dies einfach in eine asynchrone Funktion umgewandelt werden kann, aber ich kann mich irren?
(Auch diese Klasse scheint nicht mit Teilantworten umzugehen, aber das ist ein anderes Problem.)
@cody82 Ich habe eine PartialFileResponse für Video-/Audio-Streaming-Anwendungen erstellt: https://gist.github.com/danbarua/0fd9fcad5ec85e0c02dc
Benötigt ein wenig Aufräumarbeiten, könnte aber möglicherweise mit Nancy zusammengeführt werden oder die Funktionalität zu GenericFileResponse hinzugefügt werden.
Hilfreichster Kommentar
Die beste Option, um nginx für statische Inhalte (oder einen anderen http-Server) zu verwenden.