【问题标题】:Azure Functions Keeping HTTP Connection AliveAzure Functions 使 HTTP 连接保持活动状态
【发布时间】:2020-08-19 18:47:24
【问题描述】:

我一直在努力寻找与我在使用 Azure Functions (Node.js) 时遇到的问题相关的任何类型的信息。

我正在尝试保持 HTTP 请求/连接处于活动状态,并在初始请求时启动文本/流,并在不终止连接的情况下将块写入此流。

虽然我可以使用带有 response.write(...) 的标准 express + Node.js 进程/服务器来做到这一点。

我似乎无法在 Azure 的 context.res 对象中找到等效项,我也无法阻止 Azure Functions 调用 context.res.done() 而只是将块写入活动流。

我正在尝试构建一个允许我执行长轮询的解决方案...

我非常感谢任何建议或信息。

非常感谢。

更新:

致任何偶然发现这个问题的人。除了整个 http 请求/响应之外,什么都做不了。希望将来支持直接从 Azure 函数流式传输数据。

【问题讨论】:

  • 你的意思是你从一个源获取同一个 Azure Function 应用实例的大块数据,然后你不断将它们附加到你的全局变量中,一旦你得到所有的数据块,你返回所有一下子?
  • @HarshitaSingh-MSFT 正确。数据可能在几分钟内到可能 5 分钟内可用,但我需要对函数应用程序的 http 请求才能保持连接和活动,直到那时...

标签: node.js azure azure-functions azure-function-app


【解决方案1】:

Azure Functions 是一种无服务器计算服务,可让您运行事件触发的代码,而无需显式配置或管理基础架构。

由于 Azure Functions 是无服务器的,因此您无法向同一个函数实例发送不同的 Http 请求,因为您无法控制服务器并且它们是内部管理的。

我解决此问题的高级建议是(松散耦合的解决方案):拥有一个内存/数据库,您的 第一个功能应用程序可以在其中保存所有块,直到它们被 拾取第二个函数应用程序,它将流的所有块合并并发送到最终目的地。一旦第一个函数应用程序将所有块保存到内存/数据库中,您就可以向任何发布/订阅服务(如事件网格)发送消息,然后触发第二个函数应用程序。您可以为您的内存/数据库使用这样的架构 - ChunkID (PK), StreamID, ChunkStream, SequenceNo, etc.

【讨论】:

  • 您好,非常感谢您的回复。我的错是这么复杂!基本上我想要的只是保持连接打开几分钟。因此,当您向 /api/notifications 发出 http 请求时,它会将该请求保持几分钟,而不是立即返回 context.done(...)。
  • 这在Function应用中是无法实现的,但是你可以考虑我上面提到的High level的想法。
  • 没错。我只是在确认是否有办法解决整个 http 请求/响应限制。感谢您提供的信息,尽管我很感激。
  • 如果此回复回答了您的问题,您能否将其标记为帮助社区的答案?
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 2023-03-21
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
相关资源
最近更新 更多