gpt4 book ai didi

zeromq - 如何在 PUB 服务器中找出所有订阅的过滤器?

转载 作者:行者123 更新时间:2023-12-01 06:09:00 27 4
gpt4 key购买 nike

我有一个 PUB 服务器。它如何知道订阅了哪些过滤器,以便服务器知道它必须创建哪些数据?服务器不需要创建数据一次 SUB 客户感兴趣。

假设可能的过滤器集是巨大的(或无限的),但订阅者在任何给定时间只订阅了其中的几个。

示例: SUB 客户只订阅了纽约和巴黎几个区号的天气馈送数据。然后是 PUB 服务器不应该为世界上每个其他城市的每个其他区号创建天气数据,只需将其全部丢弃即可。

您如何在 中找出所有订阅的过滤器PUB 服务器?

如果没有简单的方法,我如何以另一种方式解决这个问题?

最佳答案

我会在这里回答我自己的问题,以防它对其他人有用。

要求:

  • 客户端应该能够询问服务器哪些 id(主题)可用于订阅。
  • 客户端应该选择它感兴趣的 id 并告诉服务器它。
  • 服务器应该为所有订阅的太 id 创建数据并将该数据发送给客户端。
  • 如果任何一个消失,客户端和服务器都不应该阻塞/挂起。

  • 执行:

    步骤 1. 是双向流量,通过 REQ/REP 套接字完成。

    第 2 步。是一种从一台客户端到一台服务器的流量,由 PUSH/PULL 套接字完成。

    第 3 步。是一种从一台服务器到许多客户端的流量,由 PUB/SUB 套接字完成。

    第 4 步。如果服务器或客户端不存在,接收端可以阻塞服务器或客户端。因此,在尝试接收之前,我遵循“懒惰的海盗模式”检查队列中是否有任何要接收的内容。 (如果队列中没有任何内容,我将在程序的下一个循环等中再次检查)。

    步骤 4+。客户端可以在不取消订阅的情况下死亡,服务器不会知道这件事,它会继续发布这些 id 的数据。一个解决方案是让客户端每隔一段时间向服务器重新发送订阅信息(带有时间戳)。这也可以作为客户端订阅的 ID 的心跳。如果客户端在没有取消订阅的情况下死亡,服务器会注意到一些订阅 ID 有一段时间没有刷新(时间戳)。服务器会删除这些 ID。

    这个解决方案似乎工作正常。不过,这是很多低水平的工作。如果 zeromq 的级别更高一点,并且有一些通用且可靠的架构/框架可以开箱即用,那就太好了。

    关于zeromq - 如何在 PUB 服务器中找出所有订阅的过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34522696/

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