nanomsg 框架简介

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社区

全部评论

相关推荐

行云流水1971:优化后简历(以 “后端开发岗” 为目标) 基本信息 姓名:XXX | 电话:XXX | 邮箱:XXX 求职意向:后端开发工程师 | 意向城市:XXX 教育经历 2023.09-2027.07 XX 大学 | 计算机科学与技术 | 本科 核心课程:Java 程序设计、数据库原理、计算机网络、数据结构(成绩均 85+) 技能关联:掌握 Java 基础语法、MySQL 增删改查,为后端开发奠定技术基础 项目经历 项目 1:小说推荐 - 大数据智能推荐平台 | 后端开发 | 2025.09-2025.12 技术栈:Java、SpringBoot、MySQL、Redis、Kafka 核心动作: 参与用户行为数据采集模块开发,用 Kafka 实现日志数据异步传输,峰值吞吐量提升 40%; 基于 MySQL 设计用户 - 小说关联表,配合 Redis 缓存热门推荐列表,页面响应时长从 300ms 缩短至 120ms; 成果:支撑日均 1000 + 用户访问,推荐内容点击率较初始版本提升 25%。 项目 2:在线博客 - 个性化博客分享平台 | 后端开发 | 2025.03-2025.06 技术栈:Java、SpringBoot、MyBatis、MySQL 核心动作: 开发博客发布 / 编辑接口,通过 MyBatis 实现数据持久化,接口成功率达 99.8%; 设计用户权限控制逻辑,区分普通用户 / 管理员操作权限,避免非法内容发布; 成果:完成 5 个核心功能模块开发,实现博客内容的全流程管理。 技能证书 技术栈:熟练使用 Java、SpringBoot、MyBatis 进行后端开发;掌握 MySQL 数据库设计与优化、Redis 缓存应用 工具:Git 版本管理、Postman 接口测试 自我评价 具备 Java 后端开发基础,参与 2 个完整项目的后端模块开发,能独立完成接口编写、数据持久化等工作;熟悉 SpringBoot 等主流框架,可快速上手企业级开发流程,具备良好的代码规范与逻辑思维。 需要我帮你补充项目的量化成果细节(比如接口性能、用户数据等)吗?若需要更精准的岗位适配优化,可私信沟通。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务