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 为例:
-
PIPELINE 的 PUSH 端是 client,一个 PUSH 可以连接多个 PULL 端,发送数据时会选择其中一个可用的发送;PULL 端是 server,一个 PULL 可以接收多个 PUSH 连接和数据。
-
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
的各种功能。无论是初学者还是有经验的开发人员,该手册都是一个宝贵的资源。