【问题标题】:Is it OK to slowly give back data from a webserver in this way?以这种方式从网络服务器缓慢返回数据是否可以?
【发布时间】:2014-11-25 20:34:46
【问题描述】:

这是来自我的 MVC 控制器的方法:

public async Task RecorderInfo()
{
    Stream stream = Response.OutputStream;

    for (int i = 0; i < 100; i++)
    {
        byte[] data = new byte[100];
        await stream.WriteAsync(data, 0, data.Length); // Send data to the client.
        await Task.Delay(10000); // Wait for some event.
    }
}

很明显,我想随时将数据返回给 HTTP 客户端,因此,对于这种方法存在一些问题:

  1. 长时间保持 Web 响应是否安全?当对该操作发出多个请求时,一些线程池不会用完空闲线程吗?
  2. 我会遇到什么陷阱吗?
  3. 您将如何做到这一点,您将如何离散地通知 HTTP 侦听器某个事件或向他发送一些数据?

【问题讨论】:

    标签: c# asp.net-mvc multithreading network-programming httpwebresponse


    【解决方案1】:

    我认为更传统的方法是使用 javascript 轮询服务器。这种方法也被使用并称为长轮询。

    如果您在 IIS 中托管,本文档将很有帮助。我想指出它建议不要执行长时间运行的任务。

    http://blogs.msdn.com/b/tmarq/archive/2010/04/14/performing-asynchronous-work-or-tasks-in-asp-net-applications.aspx

    “如果您好奇,IIS 线程池的最大线程数为 256。这个线程池的设计方式使其不能很好地处理长时间运行的任务。”

    如果您有很多请求,您的线程池将很快填满。

    【讨论】:

    • 客户端不是基于网络浏览器的,轮询可能非常频繁。这将使网络服务器加载不必要的请求处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多