是否可以以这种方式使用 Node-Redis 还是我会坚持使用 websockets?

Is it possible to use Node-Redis in this fashion or will I stick to websockets?

我一直在考虑涉及的设计:

  1. 客户端向端点
  2. 发出 POST 请求
  3. 路由然后发布(从构造函数 returns 我字符串化的请求对象)到 redis 通道。例如
( {request: String, transid: String, data: Object } )
  1. 另一台监听该频道的服务器,解析 JSON -> 从 obj
  2. 切换请求密钥
  3. 是否具有验证凭据等功能;
  4. 调用一个 Class returns 一个预制的响应对象,该对象被转换为 str,并通过相同(或另一个通道)发送回路由处理程序(将原始请求发送到通道)正在异步等待(在这种情况下,fastify。)例如
    ( { "transid": "1234-Abcd-5678-abcde", "state": Boolean, data: <data> } )

时间线

路由处理程序向 redis 侦听器发出发布请求:

  1. ( {request: "auth", transid: "1234-Abcd-5678-abcde", data: { email: "test@test.com", "password": "pass" } )

  2. 另一台服务器上的订阅侦听器进行内部凭证验证

发布回redis通道

  1. ( {transid: "1234-Abcd-5678-abcde", state: false, data: { error: "Incorrect" } } )

  2. 路由处理程序使用库特定方法回复客户端,即 request.send(200)

我的问题是我不完全明白如何在上面的时间表中实现步骤 4 的结果;即是否有可能在路由处理程序中几乎等待消息?我已经非常接近了,但我质疑在我设计能够扩展的东西时这是否​​是一种实用的方法。 (用户将详细信息发送到 /endpoint,/endpoint 路由处理程序向通道发布 json 消息,外部服务器侦听解析消息并将其发送到 switch 语句,即 [switch(data.request)],调用一个执行数据库操作的函数,然后使用 class 构造函数生成一个对象,通过 redis 通道发送回等待回复的路由处理程序,然后回复给客户端。)

请问大家对此有什么意见吗?

pub/sub背后的概念是解耦和执行异步任务,但你是在强制系统采用同步风格,这让他的所有优点都消失了。

例如:如果您发布消息,none 的订阅者会收到它..您会怎么做?重试? - 客户端的超时正在滴答作响,错误? - 但用户只想登录并且数据库已启动&运行

此外,当流量增加时,响应会变慢,因为自从 pub/sub 广播以来,您将只有一个订阅者来订阅所有这些消息,并且您不想处理两次登录逻辑! (我假设)

所以要解决它,你应该实现一个点对点逻辑,其中: - 所有订阅者都收到消息 - 每个订户彼此认识 - 一位订阅者说 "I will do the job" - 一位 "primary" 订阅者表示可以 - 其他订阅者丢弃消息 - 主要订户崩溃,您需要选举才能拥有新的主要订户.. - 等...

但这是消息代理或 redis stream api does 所做的,因此您不需要自己实现它。 我以前做过,但 Redis 5 还不存在。

出于这些原因,我认为您应该以同步方式进行同步工作。 pub/sub 不适合您的用法示例。