范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

实用一个高性能通信库的简单使用分享

  前言
  最近的工作中也有用到nanomsg,本篇推文来简单分享一下nanomsg的基本使用。 nanomsg简介
  nanomsg是一个实现了几种 可扩展协议 的高性能通信库;可扩展协议的任务是定义多个应用系统如何通信,从而组成一个大的分布式系统。
  下载链接:
  https://github.com/gaobaoru/nanomsg/
  当前版本nanomsg支持以下协议: 配对模式:简单的一对一的通信; 总线模式:简单的多对多的通信; 请求/回复模式:支持组建大规模的集群服务来处理用户请求; 扇入模式:支持从多个源聚合请求消息; 扇出模式:支持分配到多个节点以支持负载均衡; 调查模式:允许在一个单一的请求里检查多个应用的状态;
  可扩展协议是在网络通信协议之上实现的,当前版本nanomsg支持以下几种传输机制: INPROC:单进程内通信; IPC:单机内多进程的通信; TCP:通过tcp协议的网络通信;
  nanomsg用c实现,不依赖系统特性,所以支持多个操作系统。 nanomsg编译/交叉编译
  按照上面的链接下载后得到:
  首先创建一个build文件夹用于管理我们编译所需、编译生成的一些文件。
  这里,我们演示编译/交叉编译,首先在build目录下分别创建如下两个文件夹存放我们待会编译得到的x86_lib、arm_lib:
  然后在build路径下根据自己的需要输入如下命令生成Makefile、进行编译/交叉编译、测试:
  1、编译 ① cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/nanomsg_x86_lib ② cmake --build . ③ ctest . ④ sudo cmake --build . --target install ⑤ sudo ldconfig
  ① :/usr/local/ 是默认安装到的根目录,可以通过修改  CMAKE_INSTALL_PREFIX  变量的值来指定这些文件应该拷贝到哪个目录,这里我们指定到当前目录的nanomsg_x86_lib目录。
  ② :编译。
  ③ :测试。CMake 提供了一个称为 CTest 的测试工具,nanomsg项目根目录的 CMakeLists 文件中调用了 add_test 命令进行测试。
  ④ :安装。把编译生成的库及相关头文件安装到nanomsg_x86_lib目录中。
  ⑤ :让生成的nanomsg动态链接库为系统所共享。ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。
  查看生成的动态库是否是x86架构的:
  2、交叉编译
  在nanomsg根目录下的CMakeLists.txt文件里加上交叉编译器设置:
  然后输入如下命令: ① cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/nanomsg_arm_lib ② cmake --build . ③ sudo cmake --build . --target install ④ sudo ldconfig
  与上面的编译x86的nanomsg 库的步骤差不多,这里把测试的指令 ctest . 去掉了,因为生成的可执行文件是arm架构的,所以直接运行测试会出错。
  查看生成的动态库是否是arm架构的:
  nanomsg使用例子
  nanomsg可用于多线程、多进程、多机通信。nanomsg是一个socket library,所以其应用接口与标准的socket接口差不多,只是多了前缀 nn_ ,如nn_socket、nn_close、nn_send、nn_recv等。关于socket可查阅往期笔记:TCP、UDP通信总结
  下面演示进程间通信的client-server的例子,以下测试代码主要实现的是client-server进行收发测试。
  nanomsg_server.c: /* 微信公众号:嵌入式大杂烩 */ #include  #include  #include  #include  #include  #include  #include  #include   #define BUF_LEN  100  char *url = "tcp://127.0.0.1:2021";  int main(void) {     int server_sock = 0;     char buf[BUF_LEN] = {0};      if (server_sock = nn_socket (AF_SP, NN_PAIR) < 0)     {         printf("create server socket failed! ");         return -1;     }          if (nn_bind(server_sock, url) < 0)      {         printf("bind server sock failed!r ");         nn_close(server_sock);         return -1;     }     printf("server init success! ");      while (1)     {         if (nn_recv(server_sock, buf, sizeof(buf), 0) < 0)          {             printf("recv failed! ");             nn_close(server_sock);             exit(EXIT_FAILURE);         }         else         {             printf("recieve client msg: %sr ", buf);             if (nn_send(server_sock, buf, sizeof(buf), 0) < 0)             {                 printf("send failed!r ");                 nn_close(server_sock);                 exit(EXIT_FAILURE);             }         }     }      nn_close(server_sock);      return 0; }
  nanomsg_client.c: /* 微信公众号:嵌入式大杂烩 */ #include  #include  #include  #include  #include  #include  #include  #include   #define BUF_LEN  100  char *url = "tcp://127.0.0.1:2021";  int main(void) {     int client_sock = 0;     char buf[BUF_LEN] = {0};      if (client_sock = nn_socket (AF_SP, NN_PAIR) < 0)     {         printf("create server socket failed! ");         return -1;     }      if (nn_connect(client_sock, url) < 0)      {         printf("connect server sock failed!r ");         nn_close(client_sock);         return -1;     }      printf("client init success! ");      while (1)     {         scanf("%s", buf);         if (nn_send(client_sock, buf, sizeof(buf), 0) < 0)         {             printf("send failed!r ");             nn_close(client_sock);         }          memset(buf, 0, BUF_LEN);             if (nn_recv(client_sock, buf, sizeof(buf), 0) > 0)          {             printf("recieve server msg: %sr ", buf);         }         memset(buf, 0, BUF_LEN);        }      nn_close(client_sock);      return 0; }
  编译: gcc nanomsg_server.c -o nanomsg_server -I /home/book/git_clone/nanomsg/build/nanomsg_x86_lib/include -L /home/book/git_clone/nanomsg/build/nanomsg_x86_lib/lib -lnanomsg gcc nanomsg_client.c -o nanomsg_client -I /home/book/git_clone/nanomsg/build/nanomsg_x86_lib/include -L /home/book/git_clone/nanomsg/build/nanomsg_x86_lib/lib -lnanomsg-I xxx:指定头文件路径。 -L xxx:指定库路径。 -lnanomsg:链接动态库nanomsg.so。
  运行测试:
  运行可能会出现如下错误:
  不能找到共享库文件 libtest_d.so ,加载失败。因为一般情况下Linux会在/usr/lib 路径中搜索需要用到的库,而libtest_d.so 库并不在这个路径下。
  解决方法有两种:一种就是把这个文件拷贝至 /usr/lib 路径下,但是一般不允许这样做,一般用户也不允许往这个路径里拷贝东西。另一种就是把当前路径增加为动态库的搜索路径,命令如:
  export LD_LIBRARY_PATH=/home/book/git_clone/nanomsg/build/nanomsg_x86_lib/lib:$LD_LIBRARY_PATH
  然后继续运行:
  可见,收发测试成功。以上就是本次关于nanomsg的简单使用分享,如果文章对你有帮助,麻烦帮忙转发,谢谢! 猜你喜欢:
  Protobuf:一种更小、更快、更高效的协议
  分享一个基于全平台GUI库GUILite的简易万年历
  1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。私信回复1024,即可免费获取!

深度洞察消费者需求,美的W11智能拖地机器人打造家居清洁新风潮近年来,人们生活观念和生活习惯的变化带来了消费的升级,年轻一代的消费者对智能产品替代繁琐家务劳动的需求日趋强烈,激发了智能扫地机器人产品的需求增长。而且,中国家庭多以硬质地板为主,405km续航,快充半个小时大家轿,便宜好养活很省心,长安逸动EV长安逸动近些年来,无论是国产品牌还是合资品牌,都开始在新能源汽车上发力,开始新的征程,谁能率先抢占市场份额,在以后的日子里,就会更加好走些。今天给大家带来的是在国内知名度高的长安车骁龙8Gen1一出,我怎么感觉可以去买个865二手旗舰?买二手机主要还是要确保手机的品质,这就要有可靠的来源。新骁龙8出来了,MOTO首发了配有该处理器的x30,同时,也发布了配有骁龙888的s30,价格居然是1799起。买个865的二华为新折叠屏手机MateV曝光,定位女性用户说起折叠屏,华为和三星算手机里的先锋了,但他们不是最早推出折叠屏手机的。而是来自深圳的柔宇科技公司。柔宇在2018年10月发布了全球第一款折叠屏手机FlexPai,然而在当时却被吐苹果不一定有中国品牌电脑好?根据维修工的解说,一切很正常苹果一直被国人很推崇,甚至于向往与渴望得到的高端智能设备,这是不可磨灭的事实,但是根据我这个电脑维修工的总结可能会打破了国人的观点。首先系统上的区别,一个是苹果系统,一个是WIND5年不见,中国高端市场已成红海,酷派COOL20Pro还有机会吗?难说。2年前国内手机市场海就已经不那么蓝了,华为如日中天,全球手机市场份额稳居第二,如此环境下,iqoo和realme这样的新品牌都能打出一片天地,摩托酷派等老品牌出山也未必就杀不茅台在中国股市是什么样的存在?茅台股价几乎一直再涨,市值最高时在三万多亿人民币。茅台股市表现为什么这么好?因为它是中国股市最契合巴菲特价值投资理念的公司。茅台拥有深广的护城河,给你再多的钱也没法复制一个茅台,离10年前因为一时冲动,购买10万个比特币的中国小伙,他的生活如何虚拟货币其实这几年它的热度一直都只增不减,很多人对于虚拟货币都是非常的冲动,并且觉得以后肯定会有着一个更好的发展,包括一些非财经专业的人,他们对于这些虚拟货币都是非常的有热情了,因中国工程院院士孙宝国没有食品添加剂就没有未来食品12月7日,科创中国院士开讲第四期在抖音西瓜视频和今日头条同步上线。本期节目中,中国工程院院士香料和食品风味化学专家孙宝国以未来食品的发展趋势为主题,给网友们分享了有关食品安全食品配了一台助听器,在外面还是听不清?怎么办?我妈就这样,配了个5000块的西门子,但是仍旧听不清,机器买来没用多久就搁置了。医生说是神经性耳聋,无法逆转。耳朵不好真的很不方便,我在家讲话,她听不清,就去问我爸,你儿子讲了啥有iPhoneX华为mate10三星note8谁的拍照功能更好?除了全面屏之外,2017年的旗舰手机还有另一个锱铢必争之地DXOMark评分作为老牌的相机评测机构,DXOMark擅长用数据来呈现产品的拍照性能。2017年10月,DXOMark修
10。58万起售却一车难求,续航超1200公里,秦PLUSDMi值得买吗?10万级的家用车往往是各大车企最走量的车型,经销商都会备足库存,但受到芯片短缺的影响,车企不得不被迫降低产能,所以也就导致一些热门车型供不应求,而比亚迪秦PLUSDMi就受到了很大4。99万起售,小型车保值率第一名,油耗5升,现代瑞纳值得买吗?汽车种类五花八门,价格从几万到几千万不等,但不管是几万的车还是几千万的车,它们都属于交通工具,但高价车除了这一基本用途之外,它还是彰显身份和地位的工具,而几万块钱的车就没有这些附加至高优惠2万,与雷克萨斯UX同平台,丰田奕泽IZOA值得入手吗?虽说雷克萨斯是丰田旗下的高端品牌,但在丰田全面实施TNGA架构之后,两个品牌的联系就更加紧密了,比如丰田奕泽IZOA与雷克萨斯UX就共同出自TNGAC平台,三大件也都一样,但售价却标配2。0T,8秒内破百,轴距2。8m,11。37万起售的吉利星瑞值得买吗这几年,国产汽车品牌在技术研发方面的成果很突出,这使得国产车又上升了一个层级,前几年靠配置靠颜值吸引消费者,但多少有些空有其表的感觉,而现在国产车也可以靠技术靠硬实力打动消费者了,法系车做错了什么?天逸C5降2万,全系标配8AT,值得入手吗?在国内众多的合资汽车品牌中,法系品牌的存在感应该是最低的,本来数量就不多,而且还有一些品牌退出了中国市场,目前只有PSA集团旗下的雪铁龙和标致在苦苦支撑,其实抛开品牌因素,法系车的12。68万起售,全系6AT,高配搭载2。0T,传祺GS4PLUS值得入手吗?这两年,市面上出现了各式各样以PLUS为后缀的车型,它们一般代表着升级版或者更高的级别,而消费者也比较认可这种命名方式,下面我们要说的是广汽传祺GS4PLUS,而且它并非传祺GS410。69万起售,1。5T动力参数堪比2。0T,解析全新长安CS55PLUS在长安CS55PLUS上市一年之后,长安推出了其第二代车型,新车并不是简单的年代改款,而是在外观内饰方面都做出了调整,动力系统也有小幅提升,下面我们就解析一下全新长安CS55PLU别克昂科拉降3。6万,全系三缸机,配6AT和CVT,值得入手吗?在合资汽车品牌中,德系和日系算是一线品牌,美系只能划归到二线品牌的序列,但为了和德系日系缩小差距,美系车的方法简单粗暴,那就是大幅优惠,比如别克昂科拉,一台起售价12。59万的小型小米有品众筹又出爆款!黑科技待机90小时,仅99元快充领先同行作为一位资深米粉,无论我的消费能力是否足够,我都会去看看小米有品的众筹里看看。昨天再次打开小米有品的众筹页面,一款小钢炮击溃了我的心理防线,纳拓是小米生态链旗下企业百创源自主品牌,小米有品众筹神器!仅8。9克,10种用法,关键时刻能保命都说科技改变生活,小米有品作为小米旗下精品电商平台,为大家带来了许多黑科技爆品。最近我在小米有品众筹就发现了一款神器HiPee动态心率记录仪,十分适合被996折磨的社畜们,福音终于小米有品众筹爆款,299元改写南极人神话!网友高下立判走过风雨飘摇的10年,小米从最初的的手机业务,到现在涉猎数码家电智能家居等诸多领域。有赖于庞大产品线的支撑,小米开始布局线上电商平台,小米有品应运而生。经历数年发展,小米有品已然成