nanomsg (nng) 中的多个发布者和订阅者

2024-03-18

如何使用 TCP 传输设置多个发布者和订阅者。我怀疑您没有自动创建网格/总线。因此,每个发布者都需要一个唯一的 IP 绑定点,对吧?他们只是让订阅者通过单个套接字连接到每个发布者。

(这在以下文章中进行了讨论:https://www.freelists.org/post/nanomsg/does-nanomsg-support-multi- Producer-in-pubsub-mode,10 https://www.freelists.org/post/nanomsg/does-nanomsg-support-multi-producer-in-pubsub-mode,10 )

这基本上是正确的吗?

我倾向于使用 pub/sub 而不是总线/网状方式的原因是因为(我承认我很可能是错误的)-

  • 我不需要完全连接的网格
  • 我认为你在每个节点的基数树过滤比我想出的要好
  • 我喜欢 pub/sub 的“自动发现”方面,而不是总线传输的网格的手动接线
  • (即自动“进入和退出网格”)

基本上我拥有的是 2 个生产者(主要进行发布,但偶尔会收到在正在发布的流上添加附加信息的请求,因此他们确实需要监听) 然后大约有五个消费者,他们主要接收来自发布者的数据流,但偶尔需要向生产者发送请求。

是的,我希望 pub 是异步的,以及订阅的 recv() (在我使用它的上下文中不允许阻塞)。

所以这是一个双向的发布/订阅架构。我正在寻找实现这一点的最简单方法。 (交通很顺畅)。


当然,UDP 传输对此会很好,但我并没有屏住呼吸。


Easy :

Use the NN_PUB/NN_SUB正如它的设计,用于非阻塞、异步、广播方向。

“自下而上”使用另一个异步通道,无论是NN_PAIR/NN_PAIR或任何其他更复杂的可扩展正式通信原型模式,例如NN_PUSH/NN_PULL或相反的NN_PUB/NN_SUB这既符合您的意图又符合您的延迟目标。

工作进程将可以自由地.nn_send()每当其中一个人感到有这样的需要时,其余的事情就掌握在“中央”进程的手中。

鉴于缩放比例为 1:5 并且工作流程很轻,正如您之前发布的那样,除了丢失的消息之外,确实没有隐藏的陷阱(同样,在之前的文章中已经提出了可靠消息传递协议的主要解决方案)。

在“中央”节点上,您只需.nn_poll()这些信号通道定期(同样,以非阻塞异步方式)并且.nn_recv()数据只是在这种情况下,当这样的通道已 POSACK 处理一条消息时,该消息已经存在在那里,以便在您的应用程序代码端获取和处理。

这就是你所需要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nanomsg (nng) 中的多个发布者和订阅者 的相关文章

随机推荐

  • 如何使用 C# 读取 XML 元素的内容? [复制]

    这个问题在这里已经有答案了 可能的重复 解析 xml 文件的最佳实践 https stackoverflow com questions 55828 best practices to parse xml files 我希望能够在 XML
  • Spring WebFlux 创建无阻塞线程池

    我决定用 Java 重写我的 Web 应用程序 之前是用 Python 编写的 在我的应用程序中 我使用了无阻塞 I O 我有工作池 Celery Eventlet 线程 我在其中传递由数百个 API 调用组成的任务 现在我正在使用Spri
  • 如何使用 Process.Start 启动管道并重定向命令?

    我正在使用 System Diagnostics Process Start 在 Linux 操作系统上远程启动命令 到目前为止 我已经能够启动简单的命令 然后读取输出 例如我可以执行命令echo Hello World并阅读Hello W
  • 跨线程操作错误

    if listBox1 InvokeRequired listBox new StringBuilder this listBox1 Text 这是 c 中的代码 执行时会对 listBox1 产生无效的跨线程操作错误 listBox1 是
  • 透明背景上的 TKinter 按钮

    我试图了解如何将按钮应用到透明背景 同时保持其形状 当我生成下面的代码时 边框周围出现灰色背景 而且看起来也失去了形状 使用的颜色 侧边栏 2E3A4B 53 按钮 2C2F33 100 from tkinter import def bt
  • Laravel artisan cron 不工作

    我有一个页面在 beanstalked 中对电子邮件进行排队 该脚本按预期工作 当我有队列侦听器时 电子邮件会被触发 即 php artisan queue listen 但是当我删除侦听器并将其添加到 cron 作业时 usr bin p
  • 带有数字键的动态 json 对象

    我有一个 json 对象 在以下命令的帮助下将其转换为动态 C 对象this https stackoverflow com questions 3142495 deserialize json into c dynamic object
  • 如何获取 web.config appSettings 作为 ConfigurationSection 而不是 NameValueCollection

    ConfigurationManager AppSettings 属性 返回一个 NameValueCollection 对象 其中包含当前应用程序默认配置的 AppSettingsSection 对象的内容 但我需要 AppSetting
  • 如何检测 VPN 或代理连接? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想阻止所有使用 VPN 或代理服务器的连接 是否有办法检测是否正在使用 VPN 或代理连接 如果没有 我是否可以检查使用 VPN 或
  • iOS - 在关闭和滚动手势之间切换

    我正在尝试模仿 Line 通讯应用程序 日本事实上的通讯应用程序 中的一种行为 基本上 它们有一个模态视图控制器 内部有滚动视图 当滚动操作到达其内容的顶部时 视图控制器无缝切换到交互式解除动画 此外 当手势将视图返回到屏幕顶部时 控制权将
  • 最近的工具更新失败并出现依赖性错误后添加控制器

    由于安装 MVC3 的最新工具更新 通过 添加控制器 上下文菜单添加控制器通常会失败并出现以下错误 无法加载文件或程序集 Newtonsoft Json Version 3 5 0 0 Culture neutral PublicKeyTo
  • Ruby on Rails 表单:如何创建复选框表(或列表)

    在 Ruby on Rails 中创建一组相关复选框的最佳方法是什么 在 Turbogears 使用的 ToscaWidgets 库中 您可以执行以下操作 twf CheckBoxTable arbitrary numbers num co
  • 如何在 Python 中生成 HTML 单元测试输出?

    我正在寻找任何方法来在 HTML 摘要中显示 Python 单元测试的结果 对于 Java 和 Ruby 有这样的工具 尚未找到任何似乎可以为 Python 执行此操作的工具 那里有吗 JUnit HTML 输出 source ibm co
  • 使用 Nuxt/Vue 加载 D3

    我正在尝试在使用 Nuxt 构建的应用程序中实现 D3 我已成功将其导入到视图中
  • Rust:“无法移出‘self’,因为它是借用的”错误

    我正在尝试编写一个递归方法 将一个项目添加到树中并返回与该项目对应的树节点 enum BstNode Node int BstNode BstNode Leaf impl BstNode fn insert lt a gt a mut se
  • VB6杀死定时器

    我使用 VB6 进行编程 因为我们使用的是遗留代码和硬件 外部电子设备 我的程序是围绕计时器构建的 我将在操作系统编程中使用任务 计时器一直运行 直到其工作完成 设置一个标志并启动另一个计时器 我想要一个监督计时器来控制其他计时器当计时器没
  • 如何在 Boost.Asio 中使用零拷贝 sendmsg/Receive [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用Boost Asio 我想通过使用零拷贝发送消息 接收来改进我的系统 我可以在 Boost Asio 中使用零拷贝 send
  • c# 打开文件,路径以%userprofile%开头

    我有一个简单的问题 我在用户目录中有一个文件的路径 如下所示 USERPROFILE AppData Local MyProg settings file 当我尝试将其作为文件打开时 ostream new FileStream fileN
  • 带确认对话框的 MVC3 Actionlink

    我可以显示一条确认消息吗ActionLink 我需要使用 JavaScript 吗 没有它可以吗 你能为我举一些例子吗 谢谢 I want to make a confirmation message appear before the l
  • nanomsg (nng) 中的多个发布者和订阅者

    如何使用 TCP 传输设置多个发布者和订阅者 我怀疑您没有自动创建网格 总线 因此 每个发布者都需要一个唯一的 IP 绑定点 对吧 他们只是让订阅者通过单个套接字连接到每个发布者 这在以下文章中进行了讨论 https www freelis