34

假设我们有一个通知服务,它从消息队列中读取一个事件并实时通知所有 Web 客户端。我知道 Web 套接字是如何工作的,但是当在两者之间有一个 API 网关时,我感到困惑,然后如何在客户端、API 网关和通知服务之间维护 Web 套接字连接。

请帮忙!谢谢

编辑: 架构: 在此处输入图像描述

4

3 回答 3

12

网络套接字

客户端打开的 websocket 连接最终必须连接到 websocket 服务器。

API 网关

API 网关的工作是接受来自客户端的传入 websocket 连接并将其正确路由到 websocket 服务器。API 网关将从客户端 websocket 发送的所有数据重定向到正确的后端服务,并将始终保持连接。

一切如何协同工作...

您问题的根源是“我如何让具有 websocket 连接的客户端从通知服务接收实时更新?”。最简单的答案是在通知服务上启动一个 websocket 服务器,让每个客户端连接到 API 网关,然后让 API 网关将流量路由到通知服务。

  • 客户端 <=> API 网关 <=> 通知服务

更进一步...

如果客户有进一步的要求来转换来自通知服务的数据,那么您可以:

  1. 将该业务逻辑填充到通知服务中(不推荐)。
  2. 或者,在 API 网关和通知服务之间添加另一个服务,称为后端微服务设计模式(推荐):
    • 客户端 <=> API 网关 <=> 通知服务器(转换逻辑)<=> 通知服务。
  3. 或者,如果您选择的 API 网关旨在保存业务逻辑和转换数据;将转换逻辑直接放在 API 网关中。
于 2019-01-27T05:56:30.720 回答
5

你不应该混淆这些概念。API 网关对您的客户端隐藏了您的基础设施。在“前端的后端”的意义上,它可以是许多服务的单个前端。它还可以负责许多其他事情,例如身份验证。

Web 套接字服务器可以与您的 API 网关并行。另一个域或另一个端口。假设您使用像http://nchan.io这样的 Web 套接字服务器。来自您的应用程序的事件通过您的消息代理或您使用的任何消息传递集成模式。消费者可以获取这些事件并通过 Nchan 服务器发布它们。客户端(例如浏览器)连接到 Nchan 服务器并将被告知事件。

于 2017-11-30T19:33:38.860 回答
5

2 年后遇到这个问题,我怀疑 OP 是否仍在解决这个问题,但对于我自己和未来的访问者,我会推荐以下内容:

API 网关是一个或多个客户端进入系统的主要入口点(如果使用后端换前端模式,可以使用多个网关)。WebSocket 客户端/服务器适用于其中一个或多个客户端,但独立于 API 网关。每个客户端都将维护到 WebSocket 服务器的单独连接。在您的应用程序及其服务中,每当一个事件发布到您的消息代理时,WebSocket 服务器将订阅所有需要通知的事件,并将这些消息转发回每个连接的客户端。由 WebSocket 服务器决定哪些客户端应该接收给定的通知,或者由 WebSocket 客户端决定它是否应该处理给定的通知或忽略它(或两者都取决于逻辑所在的位置)。

于 2020-01-12T16:06:40.143 回答