如何在 NancyFX 中写入流输出?

2024-02-20

我正在使用 Nancy 编写一个简单的 Web 应用程序。至少一个请求会导致长度未知的流,因此我无法提供Content-Length。我想用Transfer-Encoding: chunked,或(在这种情况下同样可以接受,Connection: close).

我对 Nancy 源代码进行了快速修改,并且添加了Response.BufferOutput,以及要设置的代码HttpContext.Response.BufferOutput to false。你可以在这里看到:

public class HomeModule : NancyModule
{
    public HomeModule()
    {
        Get["/slow"] = _ => new SlowStreamResponse();
    }

    private class SlowStreamResponse : Response
    {
        public SlowStreamResponse()
        {
            ContentType = "text/plain";
            BufferOutput = false;
            Contents = s => {
                byte[] bytes = Encoding.UTF8.GetBytes("Hello World\n");
                for (int i = 0; i < 10; ++i)
                {
                    s.Write(bytes, 0, bytes.Length);
                    Thread.Sleep(500);
                }
            };
        }
    }

好像没有什么效果。 5 秒后,响应立即出现。我已经测试过这个简单的WebRequest基于客户端。

如何让分块输出在 Nancy 中工作?我正在使用 ASP.NET 托管,但我对其他托管选项的答案感兴趣。

如果我使用编写一个简单的服务器HttpListener,我可以设置SendChunked to true,并且它发送分块的输出,我的简单客户端正确地接收到分块的输出。


在我的实验过程中,我发现我需要以下配置。首先,设置您的web.config文件中记录的南希维基 https://github.com/NancyFx/Nancy/wiki/Hosting-Nancy-with-asp.net。值得注意的是,为了设置disableoutputbuffervalue(这就是我们想要的),看来您当前还需要指定一个引导程序。在程序集中创建一个继承自的类Nancy.Hosting.Aspnet.DefaultNancyAspNetBootstrapper并在配置文件中指定它似乎有效。

<configSections>
  <section name="nancyFx" type="Nancy.Hosting.Aspnet.NancyFxSection" />
</configSections>
<nancyFx>
  <bootstrapper assembly="YourAssembly" type="YourBootstrapper"/>
  <disableoutputbuffer value="true" />
</nancyFx>

之后,您不应设置Transfer-Encoding标头。相反,以下路由定义似乎可以将结果从我的 IIS Express 开发服务器正确流式传输到 Chrome:

Get["/chunked"] = _ =>
{
  var response = new Response();
  response.ContentType = "text/plain";
  response.Contents = s =>
  {
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes("Hello World ");
    for (int i = 0; i < 10; ++i)
    {
      for (var j = 0; j < 86; j++)
      {
        s.Write(bytes, 0, bytes.Length);
      }
      s.WriteByte(10);
      s.Flush();
      System.Threading.Thread.Sleep(500);
    }
  };

  return response;
};

由于其他文档中记录的首次渲染之前的最小大小,我为每个块指定了​​比前一个示例更多的内容StackOverflow 问题 https://stackoverflow.com/questions/16909227/using-transfer-encoding-chunked-how-much-data-must-be-sent-before-browsers-s

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 NancyFX 中写入流输出? 的相关文章

随机推荐

  • 如果不断增加访问内存超过 malloc() 分配的大小,linux glibc 中会发生什么[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 似乎评论 答案只是停留在 C 标准描述上 让我们更深入地讨论具体的实现 我在其他讨论中看到以下代码 struct size t x char
  • 如何设置newAPIHadoopFile的分区数量?

    老人 SparkContext hadoopFile需要一个minPartitions参数 这是分区数量的提示 def hadoopFile K V path String inputFormatClass Class lt InputFo
  • 使用按钮检查 html 复选框

    我正在努力在 Google 上的任何地方寻找解决方案 也许我搜索错误 但我想我会来询问 StackOverflow 上永远值得信赖的成员 我想使用 html 按钮来选中 html 复选框 我不想使用该复选框纯粹是出于可访问性的原因 因为我正
  • 使用 Google API“写入”Google 电子表格时出错

    使用的代码 var values value1 value2 value3 var body values values gapi client sheets spreadsheets values update spreadsheetId
  • 三列 100% 高度 css 布局

    我真的很纠结这个布局的CSS 这是我的 html 代码 div div menu div div div div sidebar div div 我想要左 中 右三列 宽度分别为父级宽度的 25 60 和 15 并且全部扩展至父级 主列 的
  • Java:打破jtable中的焦点循环

    在我的 JTable 中 我想像在 Excel 中一样编辑所有相关单元格 我实现了 ENTER 停止编辑单元格并将焦点转移到下一个单元格 但是 当我在最后一个单元格中按 ENTER 时 焦点循环使我跳到第一个单元格 但我想继续在表之外并将焦
  • Django mysql 连接过多

    我将 Django 与 mysql 一起使用 并遇到连接过多的问题 我从命令行运行 python 脚本 但与 Django 模型集成以检查数据库中的数据 该脚本每 30 秒运行一次 我使用线程来控制它 My function 是检查数据库状
  • 将数据从宽变为长:基于列名称的新变量

    我想将数据集从宽格式重塑为长格式 该数据集包含 300 个变量 每个变量均按照以下原则命名 ModelID Emotion ModelGender 样本数据如下 df lt structure list X71 Anger Male str
  • 向后循环 python 字符串的最佳方法

    向后循环 python 字符串的最佳方法是什么 对于所有需要 1 偏移量的情况 以下内容似乎有点尴尬 string trick or treat for i in range len string 1 0 1 1 print string
  • docker run“--env-file”提供的文件未按预期评估的解决方法

    我当前运行 docker 容器的设置如下 我有一个main env file Main export PRIVATE IP echo localhost export MONGODB HOST PRIVATE IP export MONGO
  • Laravel API,如何正确处理错误

    任何人都知道 Laravel 中处理错误的最佳方法是什么 有什么规则或需要遵循吗 目前我正在这样做 public function store Request request plate Plate create request gt al
  • 如何安装 json gem - 无法构建 gem 本机扩展

    我正在尝试将 Rails 应用程序部署到我的 ubuntu Linux 服务器 我正在使用 capistrano 和捆绑器 当安装 gems 时 它失败并出现以下错误 Installing json 1 7 7 with native ex
  • java计算句子中每个单词的频率

    我正在编写一个非常基本的java程序 它计算句子中每个单词的频率 到目前为止我已经做到了这么多 import java io class Linked public static void main String args throws I
  • MySQL的行数count(*)与information_schema中的table.table_rows不一致

    我遇到了一个奇怪的现象 我希望有人可以向我解释一下 我有一些 静态 表格 它们每天更改一次 mysql gt select appObjectGroups as tbl count as num from appObjectGroups u
  • 数据库丢失!寻找根本原因

    假设有一天 管理员像往常一样来到办公室 在 Sql Server 数据库上执行管理任务 他惊讶地发现数据库丢失了 他不知道是谁删除了它 或者是来自外部批处理或 SQL 注入等 从哪里开始调查 以及应该采取哪些重要参数 发现来找到删除数据库的
  • OpenCPU 上的自定义 R 包/找到包,但没有可见的函数

    CI 为 OpenCPU 编写了一个 R 包 并希望在我自己的云服务器上使用它 即使包本身被识别并且可以更新 我也无法访问任何功能 并且我可以通常通过 POST 和 GET 访问其他 非自定义 例如基本或统计 包 我已经安装了自定义包以及所
  • 根据两个属性值的组合选择唯一节点

    我有一些 XML 看起来像这样
  • 当公式更改单元格值时触发脚本

    我正在使用 Google 脚本 然后在 Google 工作表中的特定列发生更改时发送电子邮件 单元格中的信息可以手动输入 也可以根据其他单元格中的信息使用公式完成 当手动输入信息时 脚本可以正常工作 但在公式运行时则不行 我已经阅读了它并意
  • 为什么我无法从其他节点 IP 访问 kubernetes pod?

    我已经在 Kubespray 的帮助下安装了 kubernetes 集群 集群有 3 个节点 2 个主节点和 1 个工作节点 节点1 10 1 10 110 节点2 10 1 10 111 节点3 10 1 10 112 kubectl g
  • 如何在 NancyFX 中写入流输出?

    我正在使用 Nancy 编写一个简单的 Web 应用程序 至少一个请求会导致长度未知的流 因此我无法提供Content Length 我想用Transfer Encoding chunked 或 在这种情况下同样可以接受 Connectio