【问题标题】:Connecting angular to azure service bus - MEAN stack将角度连接到天蓝色服务总线 - MEAN 堆栈
【发布时间】:2020-09-22 10:04:16
【问题描述】:

我正在尝试弄清楚如何将我的 Angular 应用程序连接到 azure 服务总线。我尝试这样做的原因是为现场拍卖设置实时发布/订阅解决方案。我还没有真正看到任何使用 MEAN 堆栈开始完成的文档/教程,所以我试图将它们拼凑在一起。为了连接到我的 nodejs 后端,我应该在 Angular 中使用什么来建立连接?我看到的所有教程都引用了 SignalR,但它们使用的是 .net。是否有与 Nodejs 等效的库,或者我是否需要使用类似 this 的库?

感谢任何帮助/指导!

【问题讨论】:

    标签: node.js angular azure-functions mean-stack azureservicebus


    【解决方案1】:

    如果您尝试将 Angular 前端连接到服务总线以替代 SignalR,则尚不完全清楚。如果是这样,这不是一个好主意,因为它会造成严重的安全漏洞。服务总线主要用于服务器之间的通信。在这种情况下,如果您有多个后端节点服务器,您可以使用服务总线来同步它们推送给您的客户端的数据。

    使用 SignalR,您将朝着更好的方向前进。您正在寻找的实时服务器-浏览器通信技术是websockets。 SignalR 只是该标准的 .NET 实现。一旦您开始在 MEAN 堆栈上寻找 websocket 实现,您应该会在寻找指南方面取得更大的成功。以下是一些通用 JS 实现的例子:Link 1Link 2

    编辑评论回复: 您根本不想将角度连接到服务总线。一旦你公开了密钥,任何人都可以在你的总线上读/写任何他们想要的东西。而是让 Angular 将消息发送到 HTTP 函数,并将函数 send the message 发送到服务总线。

    这个计划的第二个问题是 websockets 连接,将数据推送回客户端的部分,是一个长时间运行的连接,来回不断地通信。为此的消费和保费计划are not built。如果您有任何大量流量,尝试在这些计划中使用 websocket 将使您的成本大大高于所需的成本。您需要选择一个每月固定费用的计划。那时您仍然可以使用 Functions,但使用传统的 Web 应用程序可能会更容易。

    在这种情况下,您的系统将如下所示: Angular new message -> HTTP Function/Web App -> Service Bus -> Websocket Function/Web app => Angular 如果您只运行单个服务器,则可以完全消除 Service Bus。

    另一种选择是仍然使用 HTTP 函数来接收新消息,但随后 use the SignalR service(不是 .NET 库)来处理将数据推送到客户端。这也消除了服务总线。 这就是它的样子:Angular new message -> HTTP Function/Web App -> SignalR Service->Angular

    【讨论】:

    • 我计划使用 azure 函数来处理订阅和发布到服务总线。我只是想弄清楚 Angular 在这一切中的作用。我会以角度使用这个库并将数据发送到队列并在不重新加载页面的情况下接收数据吗? npmjs.com/package/@azure/service-bus 然后使用 azure 函数服务总线队列触发函数使用 nodejs 服务总线 sdk 从队列中获取数据并更新该主题的数据?然后也许该库中的Receive a message 部分允许我在不重新加载页面的情况下获取更新的数据。我的理解正确吗?
    • 如果我将存储 blob 用于 Angular 前端,SignalR 会是经济高效的解决方案吗?我担心 Websocket 的成本会更高。另外,如果我一次在一个页面上显示 10 个拍卖清单。 SignalR 是否只注册 1 个连接,因为它是 1 个用户,还是会 = 10 个连接?
    • 1 个浏览器会话 = 1 个连接。如果用户在浏览器中使用多个选项卡,则他们可能有多个连接。如果你想在 Angular 中实时,那么你想使用 websockets,不管你是否使用 SignalR 实现。将 websocket 视为汽车,将 SignalR 视为福特或本田——它是一种特定类型的汽车。
    • 这不是真正的实时,但您可以在 Angular 中设置一个计时器来定期刷新数据。这将允许您使用标准 HTTP 函数来检索最新数据。如果可以接受 30 秒或 1 分钟的延迟,那么这将是一个可行的替代方案。
    • 如果我使用 azure 函数,那么我是否必须使用 azure event grid 之类的东西才能将信号器更改为前端?这样我就不会使用 websockets。以及后续问题,我可以使用事件网格而不是信号器还是需要一起使用它们?
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2012-06-14
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多