1、nanomsg概述

Ø  nanomsg是一个socket library,它提供了几种常见的通信模式,为了能使网络层快速、可扩展并且能易于使用。用C实现,且适用于广泛的操作系统,几乎不需要依赖。这里的通信模式(也称为“可扩展性协议”)是构建分布式系统的基本框架。通过组合它们,可以创建广泛的分布式应用程序。

Ø  目前可用的可扩展性协议有:

PAIR - 简单的一对一沟通

BUS - 简单的多对多通信

REQREP - 允许构建无状态服务集群来处理用户请求

PUBSUB - 将消息分发给订阅消息的用户

PIPELINE - 汇总来自多个来源的消息,并在许多目的点之间进行负载平衡

SURVEY - 允许一次查询多个应用程序的状态

Ø  可扩展性协议分层在传输层之上的网络堆栈中,目前nanomsg library支持以下传输机制:

INPROC - 进程内的传输(线程,模块等之间)

IPC - 在单个机器上的进程间传输

TCP - 通过TCP的网络传输

该库向应用程序公开了一个类似BSD的套接字C API。

2、nanomsg源码

Ø  nanomsg/src/

nn.h:nanomsg对外暴露的api接口

transport.h:通信层定义,主要是为了暴露给用户以实现扩展,但目前包含了utils下的相关头文件,其中inproc.h/ipc.h/tcp.h是对应的transport

protocol.h:协议层定义,也是为了暴露给用户以实现扩展,其中reqrep.h/pubsub.h/bus.h/pair.h/pipeline.h/survey.h是对应的protocol

utils/:实用工具包,包含基本数据结构(list/queue/hash)、互斥及原子操作(mutex/atomic)等

transports/:通信层实现,包括(inproc:进程内通信;ipc:进程间通信;tcp:tcp通信)

protocols/:协议层实现,包括(REQREP:请求响应;PUBSUB:订阅发布等)

core/:通用代码

aio/:线程池模拟的异步操作,带状态机的事件驱动等

CMakeLists.txt:cmake编译文件

pkgconfig.in:pkgconfig工具配置文件

Ø  nanomsg/src/nn.h

NN_EXPORT int nn_socket (int domain, intprotocol);

ü  domain:AF_SP(标准稳定的SP Socket);AF_SP_RAW(原始套接字省略了AF_SP套接字中的端到端功能,因此可用于在SP拓扑结构中实现中间设备)

ü  protocol:相应的6种可扩展性协议对应的socket types

:1)所有SP sockets是基于消息的,所以其忽略了类型定义,这里都是SOCK_SEQPACKE(有序分组套接字)类型的;

2)nn_socket函数返回的文件描述符不是标准描述符,如果与系统函数一起使用时将呈现为无法定义的行为,可能会发生冲突。

ü  errors:

1)EAFNOSUPPORT:指定address family不支持;

2)EINVAL:未知的protocol;

3)EMFILE:达到打开的SP Socket或OS限制的最大的文件描述符;

4)ETERM:library终止。

NN_EXPORT int nn_close (int s);

ü  errors:

1)     EBADF:提供的socket是无效的

2)     EINTR:操作被某个信号打断,socket不能完全关闭,调用nn_close()函数能重新启动操作

注:关闭socket,任何未被应用程序接收的入站缓冲的消息将被丢弃,同时该库将传输出站消息并指定NN_LINGER socket选项。

NN_EXPORT int nn_setsockopt (int s, intlevel, int option,                             const void *optval, size_t optvallen);

NN_EXPORT int nn_getsockopt (int s, intlevel, int option,                            void *optval, size_t *optvallen);

NN_EXPORT int nn_bind (int s, const char*addr);

NN_EXPORT int nn_connect (int s, const char*addr);

NN_EXPORT int nn_shutdown (int s, int how);

NN_EXPORT int nn_send (int s, const void*buf, size_t len, int flags);

NN_EXPORT int nn_recv (int s, void *buf,size_t len, int flags);

NN_EXPORT int nn_sendmsg (int s, conststruct nn_msghdr *msghdr, int flags);

NN_EXPORT int nn_recvmsg (int s, struct nn_msghdr*msghdr, int flags);

NN_EXPORT int nn_device (int s1, int s2);

Ø

3、pubsub模式

demo

4、reqrep模式

demo

5、参考链接

nanomsg源代码

nanomsg用户手册

nanomsg社区

(507条消息) nanomsg框架简介_coolboywjun的博客-CSDN博客_nanomsg

nanomsg框架简介相关推荐

  1. nanomsg 框架简介

    1.nanomsg概述 Ø  nanomsg是一个socket library,它提供了几种常见的通信模式,为了能使网络层快速.可扩展并且能易于使用.用C实现,且适用于广泛的操作系统,几乎不需要依赖. ...

  2. NanoMsg框架|Android Studio编译NanoMsg源码

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2184字,预计阅读6分钟 导语 前面的章节已经把NanoMsg的简介,及C#相关的NNanoMsg使用Demo已经介绍完成了, ...

  3. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  4. 《HiWind企业快速开发框架实战》(0)目录及框架简介

    <HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...

  5. WPF Interaction框架简介(一)——Behavior

    原文:WPF Interaction框架简介(一)--Behavior 在WPF 4.0中,引入了一个比较实用的库--Interactions,这个库主要是通过附加属性来对UI控件注入一些新的功能,除 ...

  6. go语言学习(二)——Gin 框架简介

    GoWeb开发有很多框架,如Beego.Gin.Revel.Echo.IRis等,学习框架可以快速做开发,对比常见goweb框架,通过其github的活跃度,维护的team,生产环境中的使用率以及师兄 ...

  7. Java开源——常见J2EE框架简介

    Java开源--常见J2EE框架简介 Spring Framework Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口 ...

  8. 【EventBus】EventBus 事件总线框架简介 ( EventBus 使用流程 )

    文章目录 一.EventBus 事件总线框架简介 二.EventBus 使用流程 一.EventBus 事件总线框架简介 Android 中的事件传递机制 : 使用 Intent 在组件间传递信息 ; ...

  9. 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )

    文章目录 一. 热修复框架简介 1.类替换 2.so 替换 3.资源替换 4.全平台支持 5.生效时间 6.性能损耗 7.总结 二. 将 Java 字节码文件打包到 Dex 文件 一. 热修复框架简介 ...

最新文章

  1. joomla 插入百度地图
  2. 【Python】列表 list 添加元素的几种方法
  3. hdu 5521 Meeting(最短路)
  4. sql遍历所有数据集
  5. Java实现冒泡排序动画展示
  6. 走线和交互式布线_画PCB时,一些非常好的布线技巧
  7. 无盘服务器性能测试,无盘系统性能测试及结语
  8. idea 搜索快捷键
  9. java反射机制面试详解
  10. C# sqlhelper
  11. CT图像重建简要介绍
  12. 应用回归分析(知识点整理)(五)——多重共线性与自变量的选择
  13. 【测试开发】Pytest—Html测试报告定制及封装
  14. Unity-Chan Toon Shader 2 介绍
  15. 如何在谷歌地图上标注宾馆饭店矢量点并叠加导出为图片
  16. if_attact中几个宏定义
  17. (转)【最新】抖音相关工具合集--在线观看,网页版,去水印下载视频,下载音乐,音乐榜单等
  18. (十一)IPSec协议
  19. Commands that may modify the data set are disabled, because this instance is configured to report er
  20. Flowable 6.6.0 BPMN用户指南 -10 流程实例迁移 - 10.1 简单示例

热门文章

  1. numpy数组中round, around, rint, ceil, floor, modf, trunc, fix函数的区别
  2. 通信原理chapter2总结(内含多径效应和多普勒效应MATLAB仿真)
  3. 如何写自己的lib文件并测试
  4. myeclipse+wtk环境配置
  5. 酒店AI机器人被下岗 人工智能没想象中那么可怕
  6. ubuntu18.04下lvm2磁盘合并
  7. 设计一个按照时间片轮转法实现处理机调度的程序
  8. 言论-摘自《读者》2006年第11期
  9. 阿里云 oss 同区域不同桶名的文件互传
  10. dbeaver连接Oracle中文乱码的解决方案--druid