NNG/nanomsg 是最近项目上使用到的一个通信库,用来实现进程间过程调用和线程间通信,很是方便。

NNG 是 nanomsg 的继任版本,而 nanomsg 则是流行的 ZMQ 的 C 重写版。

NNG 将通信使用的协议和传输分离,同一个协议可以工作在不同的传输层上,类似与 TCP/IP 的应用层和传输层的分层,同时接口上屏蔽了底层细节,统一用字符串 URL 来描述传输模式。这样当使用场景修改时,可以通过简单修改 URL 来实现适应,极具灵活性。

同时如 NNG 描述所言 “light-weight brokerless messaging”,NNG 中的通信各方是不需要第三方程序介入的,这与 MQTT/Redis 通信需要服务器不同。这样很适合作为通信库来使用而没有其他依赖。

NNG 支持的通信协议主要有以下几种:

  • PAIR 一对一双向通信。
  • PIPELINE(PUSH/PULL) 单向通信,类似与生产者消费者模型的消息队列。
  • PUB/SUB 单向广播。
  • REQ/REP 请求-应答模式,类似与 RPC 模式。
  • BUS 网状连接通信,每个加入节点都可以发送/接受广播消息。
  • SURVEY 用于多节点表决或者服务发现。

NNG 支持的传输模式主要有以下三种常用,其他还有tcp附加tls 1.2加密的tls传输和基于WebSocket的ws传输:

  • inproc 进程内线程间传输
  • ipc 主机内进程间传输
  • tcp 网络内主机间传输

通信协议里除了 PAIR 之外,基本都是一对多的通信模式,这点需要注意,以 PIPELINE 和 PUB/SUB 为例:

  1. PIPELINE 的 PUSH 端是 client,一个 PUSH 可以连接多个 PULL 端,发送数据时会选择其中一个可用的发送;PULL 端是 server,一个 PULL 可以接收多个 PUSH 连接和数据。
  2. PUB/SUB 的 SUB 端是 client,一个 SUB 可以连接多个不同的 PUB 端,接收多个 PUB 端广播的数据;PUB 端是 server,一个 PUB 可以接收多个 SUB 连接并广播数据。

基于以上,多个程序是没办法共用一个 PUB/SUB 通道来广播数据的,这与 ROS 里的 topic 和 LCM 中的 channel 模式不同。如果要实现类似功能,则可以使用 PIPELINE + PUB/SUB 来处理:

  • 独立一个话题发布的程序,拥有一个 PULL 和 PUB。
  • PULL 约定一个 URL,所有需要发布该话题的程序都 PUSH 数据到该 URL 上。
  • PUB 约定一个 URL,所有需要获取该话题的程序都 SUB 到该 URL 上。
  • 程序内部循环将 PULL 读取的数据发送到 PUB 上。

以上则可以模拟出 ROS topic 数据合并 或者 LCM 中 channel 的类似功能。

整体上看,NNG 的 API 很简约,主要是 4 个,open/recv/send/close,open 根据协议不同使用的函数会不同。配置则是 setopt/getopt,与 UNIX API 类似。API 中没有上下文环境(context-less)依赖,只需要一个 nng_socket,这种设计和实现方法值得去学习一下(初步揣测应该是使用指针值作为handle,如果要强制编译器做类型检测,则会套上一层 struct,如 typedef struct { _nng_xxx_socket * p } nng_socket; )。

NNG 协议基本上囊括了常见的通信需求,一些特殊的需求,也可以通过组合协议来实现,比如上面的模拟 ROS topic 或者 LCM channel 的方法。这样一来,如果在程序中使用 NNG,不管是多进程,还是多线程,通过设计,可以进一步增强模块化,同时不乏灵活性。如果环境变化,程序不管是由多进程改成多线程,还是由多线程改成多主机,都很容易实现。

常见模块/进程/线程间通信,可以依据具体需求来使用 PIPELINE(消息队列) 还是 REQ/REP(过程调用),而不是锁+全局变量,每个模块单元只需要做单一相关的具体事务,无需知晓全局状态。

关于 nng/nanomsg 库的一点想法 - 碎片 (tisyang.github.io)

NNG/nanomsg 是最近项目上使用到的一个通信库,用来实现进程间过程调用和线程间通信,很是方便。NNG 是 nanomsg 的继任版本,而 nanomsg 则是流行的 ZMQ 的 C 重写版。NNG 将通信使用的协议和传输分离,同一个协议可以工作在不同的传输层上,类似与 TCP/IP 的应用层和传输层的分层,同时接口上屏蔽了底层细节,统一用字符串 URL 来描述传输模式。这样当使用场景修改时,可以通过简单修改 URL 来实现适应,极具灵活性。同时如 NNG 描述所言 “light-weight bro :information: 如果您正在寻找旧版的 nan omsg ,请参阅存储 。 该项目是对称为的可伸缩性协议 的重写,并添加了重要的新功能,同时保留了与原始版本的兼容性。 将其视为“ nan omsg -next-generation”可能会有所帮助。 NNG :轻量级消息传递 NNG 与其前身 (在某种程度上为 )一样,是一种轻量级的无代理 ,提供了简单的API来解决常见的重复出现的消息传递问题,例如发布/订阅,RPC样式的请求/回复或服务发现。 。 该API使程序员免于担心诸如连接管理,重试和其他常见注意事项之类的细节,因此他们可以专注于应用程序而不是管道。 NNG 是用C实现的,只需要构建C99和CMake。 它可以构建为共享 或静态 ,并且易于嵌入。 如果还不支持您的平台,则还可以轻松移植到新平台。 NNG 是根据MIT的自由商业许
nan omsg 是一个消息通信组件 - zeromq的作者之一用C语言重写的通信框架, 使用宽松的MIT许可开源,小、轻、快,非常方便,介绍我就不多写了,下面我具体的讲用法,用了你就知道是怎么回事。 pull/push 单向管道推送模式 push/pull套接字结合使用可实现消息队列的扇出模式, 这是一个1对多的模式,服务端不能有多个,但客户端可以多个。 官网上给的这个图是1对1的,...
Nan oMsg 简介: Nan oMsg 是一个Socket的通讯 ,使用C语言编写实现的,这样就可以适用于多种操作系统,而且几乎不需要什么依赖,可扩展并且能易于使用。 Nan omsg 提供了几种常见的通信模式 ( 也称为“可扩展性协议” ) 是构建分布式系统的基本框架。 通过组合它们,可以创建广 泛的分布式应用程序。 可扩展性协议类型 首页:https:// nan omsg .org/index.html nan omsg 是一个套接字 ,提供了几种常见的通信模式。它旨在使 网络 层快速,可扩展且易于使用。它以C语言实现,可在多种操作系统上运行,而无需进一步依赖。(该项目已在很大程度上被 nng 项目取代 。鼓励用户使用 nng ) 通信模式,也称为“可伸缩性协议”,是构建分布式系统的基本模块。通过组合它们,可以创建大量的分布式应用程序。
需要 cmake 版本号大于等于3.1, 个人使用了Visual Studio 的 Native tools command prompt (分为x86, x64 分别用于Build各自构架的 nng ) github源 https://github.com/ nan omsg / nng 下载压缩包解压缩 进入文件夹按照指导输入: mkdir buildx64 cd buildx64 cmake -G “Ninja” … ninja ninja test ninja install (这一步不要也可, 因为第.
Nan omsg 文档 Nan omsg 是现代消息传递 ,它是MartinSustrik及其同事用C语言编写的ZeroMQ的后继程序。 nan oms Nan omsg 文档 Nan omsg 是现代消息传递 ,它是ZeroMQ的后继程序,由Martin Sustrik及其同事用C语言编写。 nan omsg 已获得MIT / X11许可。 “ nan omsg ”是250bpm sro的商标http:// nan omsg .org/ https://github.com/ nan omsg / nan omsg 要求 Nan omsg 1.1.4安装 nan omsg :make deps安装[依赖项] nan omsg =“ 0.7.2”导入板条箱以使用它:extern crate nan omsg ; 创建一个套接字
### 回答1: 《 nng 参考手册第二版》是一本有关 nng 网络 通信 的手册,提供了 nng 的英文原版说明。 nng 是一个开源的、可移植的 网络 通信 ,旨在提供可靠、高效、简单易用的 网络 编程接口。 这本手册详细介绍了 nng 的各项功能和使用方法。它包括了与 网络 通信相关的概念、API函数的列表、用法示例以及常见问题的解答。通过阅读这本手册,开发者可以更深入地了解和掌握 nng 的使用,从而更好地进行 网络 编程。 手册的英文原版提供了对 nng 的全面解释,适用于具有一定英文阅读能力的开发者。它使用简洁明了的语言,提供了大量的代码示例和详细的解释,帮助读者理解每个API函数的功能和用法。 对于使用 nng 进行 网络 编程的开发者来说,阅读这本手册是非常重要的。它不仅可以帮助开发者快速入门 nng ,还能提供进阶的知识和技巧,帮助开发者更好地利用 nng 开发高性能的 网络 应用程序。 总之,《 nng 参考手册第二版英文原版》是一本对 nng 网络 通信 进行全面解释的手册,提供了对 nng 功能和使用方法的详细说明,适用于有一定英文阅读能力的开发者。它是学习和使用 nng 的重要参考资料。 ### 回答2: nng 参考手册第二版(原文为英文)是一本关于 nng 通信 的手册,该 是用于开发 网络 应用程序的工具。 nng 是一个简单而强大的开源 网络 编程 ,旨在提供可靠、高效的消息传递机制。 这本参考手册详细介绍了 nng 的各种功能、API和使用方法。它包含了对 nng 的核心概念和基本操作的解释和示例,适用于初学者和有经验的开发人员。手册内容分为多个章节,每个章节都涵盖了不同的主题,例如套接字和协议、消息传递模式、事件处理和错误处理等。 参考手册不仅提供了对 nng 的详细说明,还提供了丰富的示例代码和用例,以帮助读者更好地理解和学习 nng 编程。此外,手册还介绍了一些常见的 网络 编程概念和术语,以及在 nng 中的实现方式。 nng 参考手册第二版对于开发人员来说是一个宝贵的资源,它可以帮助他们快速入门 nng ,并在实际项目中有效地使用它。无论是构建分布式应用程序、 网络 传输协议还是消息队列系统, nng 都可以提供可靠的通信机制。 总之, nng 参考手册第二版英文原版是一本全面且易于理解的文档,对于学习和使用 nng 通信 的开发人员来说是一份宝贵的参考资料。 ### 回答3: nng 参考手册第二版英文原版是一本详细介绍 nng 通信 的指南。 nng 是一个轻量级的异步通信应用程序接口,用于帮助开发人员构建可靠和高效的 网络 应用。 该手册首先介绍了 nng 的概述,包括其设计原则和目标。它强调了 nng 的可移植性和易于使用的特点,并提供了关于如何在不同平台上安装和配置 nng 的详细说明。 接下来,该手册介绍了 nng 的基本概念和核心功能。它解释了 nng 的消息传递模型,包括如何创建和发送消息以及如何接收和处理消息。此外,它还介绍了 nng 的套接字API,包括如何创建和管理套接字以及如何使用不同的传输协议进行通信。 除了基本功能,该手册还提供了一些高级功能和技术,如多线程处理、事件循环和错误处理。它还涵盖了一些特定的主题,如如何处理断开连接、如何进行发布-订阅通信和如何进行请求-回复通信等。 总的来说, nng 参考手册第二版英文原版是一本全面介绍 nng 通信 的指南,适用于开发人员使用 nng 构建高效可靠的 网络 应用程序。它提供了丰富的示例代码和详细的说明,以帮助开发人员充分理解和应用 nng 的各种功能。无论是初学者还是有经验的开发人员,该手册都是一个宝贵的资源。