Nancy 不能同时处理很多(<10)个并发请求。
这是非服务器 Windows 操作系统上完整 iis 的一个常见问题的尖叫声,您运行的是哪个版本的 windows/iis(如果有的话)?
忘了提:我正在使用 Microsoft.Owin.Host.HttpListener 自托管。
也许这就是问题所在?
操作系统是 Windows 10。
自托管的最佳选择是什么?
将 nginx 用于静态内容(或其他 http 服务器)的最佳选择。
我同意@Kiri-rin nginx 非常适合静态内容,然后让 nancy 处理 api 相关的内容。
好吧,问题是我也有很大的非静态内容或需要一些时间来生成。
我知道这不是常见的用例。
我将进一步调查此事。 如果有人能给我一个问题可能出在哪里的提示,那就太好了。
@cody82如果你有长时间运行的路由,那么你应该让它们异步,这样它们就不会阻塞请求线程
是的。 那么这是否意味着问题不在于 Nancy 中的一般 HTTP 请求处理,而在于未正确使用异步的静态文件的处理程序?
我也在 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
需要一些清理,但可能会合并到 Nancy 或将功能添加到 GenericFileResponse。
最有用的评论
将 nginx 用于静态内容(或其他 http 服务器)的最佳选择。