gpt4 book ai didi

azure - Azure 上的服务器端事件响应缓冲问题(ASP.net Core Web 应用程序)

转载 作者:行者123 更新时间:2023-12-03 03:23:07 26 4
gpt4 key购买 nike

为了试验服务器端事件和 ASP.NET Core,我编写了一个简单的 Web 应用程序来制作基本的聊天窗口。向服务器的发布是通过使用 fetch 的简单 AJAX 调用完成的,并且客户端使用服务器端事件接收数据。一切都在我的本地计算机上完美运行,但是当我将内容发布到 Azure 时,我发现响应偶尔会到达客户端,通常会等待第二个聊天帖子才会出现。

在这个问题上摸索了一段时间后,我最终假设 Azure 上进行了一些额外的响应缓冲,而我的本地计算机上没有发生这些缓冲。我在每篇文章后编写了大量虚拟数据的实验确实解决了问题,为我的理论提供了一些支持。

我在网上搜索了几篇文章,证实了我的怀疑。例如:https://learn.microsoft.com/en-us/azure/api-management/how-to-server-sent-events 。它特别提到:“关闭转发请求策略上的响应缓冲,以便事件立即转发到客户端。”

我对 Azure 以及除了基础知识之外的任何东西如何工作非常无知。我试图弄清楚上面的文章(以及其他类似的文章)是否与我相关。我已经编写了一个 Web 应用程序并发布了它,但这些文章引用了“API 管理实例”,该实例在我发布应用程序时并未创建。

所以,我们终于得出了以下问题:

  1. 尽管我的应用程序实际上没有 API,但我是否需要创建 API 管理实例事件?

  2. 如果我确实关闭此缓冲,我可以仅针对 SSE 流而不是整个应用程序关闭它吗?

或者

  • 我是不是找错了方向,有更好的方法来解决这个问题吗?
  • 最佳答案

    我最终自己解决了这个问题。答案是#3:我找错了树。

    简单的答案是禁用服务器端事件中间件中的缓冲。也就是说,在我的 SSE 中间件代码的开头附近,我添加了以下代码:

    var responseBodyFeature = context.Features.Get<IHttpResponseBodyFeature>();
    if (responseBodyFeature != null) responseBodyFeature.DisableBuffering();

    虽然我无法解释在我的本地计算机上没有这些行的情况下,事情可以正常工作,但在 Azure 应用程序服务上却失败了...使用此附加代码,一切都可以在两个位置正常工作。

    关于azure - Azure 上的服务器端事件响应缓冲问题(ASP.net Core Web 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76397430/

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