Nancy: 许多并发请求

创建于 2016-04-16  ·  9评论  ·  资料来源: NancyFx/Nancy

描述

Nancy 不能同时处理很多(<10)个并发请求。

重现步骤

  1. 添加 StaticContentsConventions 以提供目录中的文件。
  2. 将长视频文件复制到目录中。
  3. 通过指向所有选项卡(例如http://localhost/myvideo.mp4 ),在浏览器中的多个选项卡(> 10)中打开视频
  4. 观察:视频并未显示在所有选项卡上,而是等待连接,直到您关闭其他选项卡。

    系统配置

  • 南希版本:1.4.1
  • 南希主持人:OWIN
  • 浏览器:Chrome

最有用的评论

将 nginx 用于静态内容(或其他 http 服务器)的最佳选择。

所有9条评论

这是非服务器 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。

此页面是否有帮助?
0 / 5 - 0 等级