gpt4 book ai didi

nancy - 如何在 NancyFX 中编写流输出?

转载 作者:行者123 更新时间:2023-12-04 11:11:40 26 4
gpt4 key购买 nike

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

我对 Nancy 源代码进行了快速破解,并添加了 Response.BufferOutput , 和设置代码 HttpContext.Response.BufferOutputfalse .你可以在这里看到:

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 编写一个简单的服务器,我可以设置 SendChunkedtrue ,它发送分块的输出,我的简单客户端正确地以块的形式接收。

最佳答案

在我的实验中,我发现我需要以下配置。首先,设置您的 web.config文件如 Nancy Wiki 中所述.值得注意的是,为了设置disableoutputbuffer值(这是我们想要的),看来您目前还需要指定一个 bootstrap 。在您的程序集中创建一个继承自 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 questions 中记录的首次渲染之前的最小尺寸,我指定的每个块的内容比前一个示例更多

关于nancy - 如何在 NancyFX 中编写流输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com