NanoMsg (NNG) 和 FlatBuffers 是否适合该项目?

2023-12-02

大声喊出我们是否应该考虑更好的事情:

我正在寻找一种非常快速且简单的方法来获取多个程序(例如 5 个) - 每个程序都在私有 OpenStack 云上的单独节点上运行以相互通信。

  • 数据包将是短 C++ 结构(小于 100 字节)
  • 交通流量将会较少(可能低于 100 辆/秒)
  • 延迟确实不是问题。 (朋友之间的几毫秒是多少?) - 我们有很多周期和内存
  • 消息应该以发布/订阅客户端/服务器范例的方式完成
  • 库应该是 C++ 友好的。但可以在 Windows 和 Linux 上工作
  • 稍后我们可能需要额外的语言绑定
  • 我们不希望丢失消息

这是我的第一个想法。但如果你还有其他东西可以提供。喊出来。

UDP 套接字层的友好包装器:

  • NanoMSG(NNG,因为它是 nanoMsg 的活跃项目)https://github.com/nanomsg/nng

C++ 结构数据的编码器/解码器:

  • 平面缓冲区https://google.github.io/flatbuffers/

对于序列化,几乎任何具有正确语言绑定的东西都可以。 Google Protocol Buffers 与语言无关,有很多可用的绑定。唯一要避免的是内置于源代码中的序列化(如 Boost 的序列化 is / was),因为那样你就无法轻松地将其移植到另一种语言。

对于消息传输,ZeroMQ、NanoMsg 是不错的选择。然而,我认为这实际上可以归结为

  1. 你多么不想丢失消息,
  2. 正是您所说的“丢失消息”的意思。

关于 ZeroMQ(和 NanoMsg)的问题是(据我所知)当发生故障时,没有真正的方法可以知道消息的命运。例如,在 ZeroMQ 中,如果您发送一条消息,而接收者恰好正在工作并已连接,则该消息将通过该连接传输。发送端现在认为工作已经完成,消息已经传递。然而,除非且直到接收端实际调用zmq_recv()并完全处理所给的内容,如果接收端进程崩溃、断电等,消息仍然可能丢失。这是因为在消息被消耗之前,消息存储在 ZeroMQ 运行线程内的 RAM 中(各自的Context()-实例的控制域)。

您可以通过某种形式的 ack 消息以其他方式返回、超时等来解决这个问题。但这开始变得很麻烦,您最好使用 RabbitMQ 之类的东西。

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

NanoMsg (NNG) 和 FlatBuffers 是否适合该项目? 的相关文章

  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内

随机推荐

  • 用C++制作一个倒计时器

    我有一个控制台应用程序 旨在只在 Windows 上运行 它写在C 有什么办法可以等待60秒 and 显示剩余时间在屏幕上 然后继续代码流 我尝试了互联网上的不同解决方案 但没有一个有效 它们要么不起作用 要么无法正确显示时间 Please
  • Windows 7上Android Studio安装失败,找不到JDK

    我下载了 Android Studio 并尝试启动该程序 它在 Windows 7 64 位和 Java 1 7 上运行 在安装过程中 检测到我的 Java 1 7 安装的其余部分顺利进行 但是 当尝试从桌面图标启动应用程序时 没有任何反应
  • 使用 DotNetZip 从 zip 中提取特定文件夹

    我已经搜索了示例 但似乎找不到涉及提取某个文件夹的 DotNetZip 场景 我正在尝试从 zip 文件中提取一个名为 CSS 的文件夹 它是 zip 文件内的顶级文件夹 这是我到目前为止的代码 using ZipFile zip1 Zip
  • Swift 中如何知道哪个 SKSpriteNode 受到碰撞检测的影响?

    情况 我的 iOS 屏幕上有两艘或更多艘飞船 两者都有不同的属性 如名称 大小 生命值和得分 它们显示为SKSpriteNodes并且每个都添加了一个physicsBody 目前 这些额外的属性是扩展的变量SKSpriteNode clas
  • 在R中的时间间隔后中断readline()

    如何在经过一定时间后中断循环 我有一个从用户收集观察数据的功能 记录数据时 用户应该有一个预定义的时间限制 示例中为 30 秒 目前 如果用户输入晚于时间限制结束 该功能就会中断 record events lt function dura
  • 将 CUDA 添加到 ROS 包

    我想在 ros 包中使用 cuda 有人给我一个简单的例子吗 我尝试使用 cuda 函数构建一个静态库并将该库添加到我的包中 但总是出现链接错误 未定义的引用 cuda 我已经构建了一个可执行文件而不是库并且它可以工作 请帮忙 我自己找到了
  • 使用数组分隔符连接数组序列(“散布”)

    是否有一个函数可以让我连接多个数组 它们之间有分隔符 分隔符也是数组 类似于join有效但不限于字符串 该函数可以是标准 JS 或主要库的一部分 例如lodash 这就是标签中引用它的原因 这是一个用法示例 let numbers 1 2
  • 未捕获的类型错误:对象 [object Object] 没有方法“on”

    我创建了一个函数appendScript 它将在按钮单击事件上调用 我的函数代码是 function appendScript var v js var head document getElementsByTagName head 0 v
  • 设置UDP套接字的recv fcn超时

    我通过以下方式发送 UDP 数据包sendto 然后通过以下方式收到答案recv if recv没有收到回复 程序不会继续进行 但是 udp数据包可能会丢失 或者由于某种原因无法发送数据包 从而导致程序卡在recv线 我想知道如何设置超时r
  • Google 托管库不必要地使用缓存断路器

    我在仪表板上使用以下代码来不断刷新它而不会闪烁如何使用 jQuery 刷新页面 然而 由于一些缓存破坏器 这也会导致 javascript 每次重新加载
  • JavaScript 中的日期到时间戳

    javascript 是否可以将某些日期转换为时间戳 我有这种格式的日期2010 03 09 12 21 00我想用 javascript 将其转换为等效的时间戳 回应您的编辑 你需要解析日期字符串建立一个Date对象 然后就可以获取时间戳
  • create-react-app 中缩小的组件堆栈跟踪(开发模式)

    Running create react app in 发展 mode 为什么我的控制台错误链接到缩小的代码块 我想我记得 CRA 能够显示源映射文件 这是因为该错误是由您使用的依赖项之一引发的 当你安装一个包时 你会在你的node mod
  • 使用外部缓冲区存储字符串而不进行复制

    假设我有一个函数可以得到const string 作为其输入 例如 void foo const string s 然后我有一个内部缓冲区const char buffer 我知道它的大小 我认为如果我内联创建字符串 仍然会发生一份副本 f
  • 以编程方式查找 Chrome 浏览器历史记录

    我正在制作一个小型 Java 应用程序来显示用户最常访问 Chrome 中的哪些 URL 如何在 Java 中访问我的浏览器历史记录 创建一个ContentObserver班级 static class ChromeOberver exte
  • Python:循环读取所有文本文件行

    我想逐行读取巨大的文本文件 如果找到带有 str 的行则停止 如何检查是否到达文件末尾 fn t log f open fn r while not is eof f how to check that end is reached s f
  • 从表示图像的数组中提取环/扇形区域

    我正在尝试从 MATLAB 中图像的数组表示形式中提取特征 这些特征具有圆形 环 和扇形的形状 如下图所示 我花了相当多的时间寻找一个可以做到这一点的内置函数 我已经设法使用一个丑陋的循环来进行环提取 但不知道从哪里开始扇区部分 任何关于如
  • 如何为 Firefox、IE 和 Chrome 创建插件/附加组件

    我需要为 IE firefox 和 chrome 浏览器创建插件 附加组件 以满足以下要求 如果请求的网址采用特定格式 匹配特定正则表达式模式 则插件必须阻止该请求并弹出警报框 我进行了很多搜索 但没有找到任何有用的东西 对于IE 我认为我
  • 发布表单时如何获取复选框元素中未选中复选框的值?

    我有一个如下所示的表格
  • 使用 android.support.v7.app.ActionBar 的选项卡

    我最近更新了我的 Android 应用程序 以在 Android 2 3 上使用对操作栏和操作栏选项卡的 v7 支持 更新代码后 我在 4 2 设备和模拟 2 3 设备上运行该应用程序 操作栏和选项卡在真实硬件上显示良好 但在模拟设备上则不
  • NanoMsg (NNG) 和 FlatBuffers 是否适合该项目?

    大声喊出我们是否应该考虑更好的事情 我正在寻找一种非常快速且简单的方法来获取多个程序 例如 5 个 每个程序都在私有 OpenStack 云上的单独节点上运行以相互通信 数据包将是短 C 结构 小于 100 字节 交通流量将会较少 可能低于