吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

nanomsg的基本使用

FPGA之家 ? 來(lái)源:Linux大陸 ? 作者:Linux大陸 ? 2022-07-04 10:39 ? 次閱讀

前言

上次的推文實(shí)用 | 分享幾個(gè)非常實(shí)用的開源項(xiàng)目中有提到過(guò)nanomsg,正好最近的工作中也有用到nanomsg,本篇推文來(lái)簡(jiǎn)單分享一下nanomsg的基本使用。

nanomsg簡(jiǎn)介

nanomsg是一個(gè)實(shí)現(xiàn)了幾種可擴(kuò)展協(xié)議的高性能通信庫(kù);可擴(kuò)展協(xié)議的任務(wù)是定義多個(gè)應(yīng)用系統(tǒng)如何通信,從而組成一個(gè)大的分布式系統(tǒng)。

下載鏈接:

https://github.com/gaobaoru/nanomsg/

當(dāng)前版本nanomsg支持以下協(xié)議:

配對(duì)模式:簡(jiǎn)單的一對(duì)一的通信;

總線模式:簡(jiǎn)單的多對(duì)多的通信;

請(qǐng)求/回復(fù)模式:支持組建大規(guī)模的集群服務(wù)來(lái)處理用戶請(qǐng)求;

扇入模式:支持從多個(gè)源聚合請(qǐng)求消息;

扇出模式:支持分配到多個(gè)節(jié)點(diǎn)以支持負(fù)載均衡;

調(diào)查模式:允許在一個(gè)單一的請(qǐng)求里檢查多個(gè)應(yīng)用的狀態(tài);

可擴(kuò)展協(xié)議是在網(wǎng)絡(luò)通信協(xié)議之上實(shí)現(xiàn)的,當(dāng)前版本nanomsg支持一下網(wǎng)絡(luò)協(xié)議:

INPROC:?jiǎn)芜M(jìn)程內(nèi)通信;

IPC:?jiǎn)螜C(jī)內(nèi)多進(jìn)程的通信;

TCP:通過(guò)tcp協(xié)議的網(wǎng)絡(luò)通信;

nanomsg用c實(shí)現(xiàn),不依賴系統(tǒng)特性,所以支持多個(gè)操作系統(tǒng)

nanomsg編譯/交叉編譯

按照上面的鏈接下載后的到:

73bf60e4-e3a1-11ec-ba43-dac502259ad0.png

首先創(chuàng)建一個(gè)build文件夾用于管理我們編譯所需、編譯生成的一些文件。

這里,我們演示編譯/交叉編譯,首先在build目錄下分別創(chuàng)建如下兩個(gè)文件夾存放我們待會(huì)編譯得到的x86_lib、arm_lib:

73eaf808-e3a1-11ec-ba43-dac502259ad0.png

然后在build路徑下根據(jù)自己的需要輸入如下命令生成Makefile、進(jìn)行編譯/交叉編譯、測(cè)試:

1、編譯

①cmake..-DCMAKE_INSTALL_PREFIX=$PWD/nanomsg_x86_lib
②cmake--build.
③ctest.
④sudocmake--build.--targetinstall
⑤sudoldconfig

① :/usr/local/ 是默認(rèn)安裝到的根目錄,可以通過(guò)修改 CMAKE_INSTALL_PREFIX 變量的值來(lái)指定這些文件應(yīng)該拷貝到哪個(gè)目錄,這里我們指定到當(dāng)前目錄的nanomsg_x86_lib目錄。

7410e874-e3a1-11ec-ba43-dac502259ad0.png

② :編譯。

74437f14-e3a1-11ec-ba43-dac502259ad0.png

③ :測(cè)試。CMake 提供了一個(gè)稱為 CTest 的測(cè)試工具,nanomsg項(xiàng)目根目錄的 CMakeLists 文件中調(diào)用了 add_test 命令進(jìn)行測(cè)試。

7480142e-e3a1-11ec-ba43-dac502259ad0.png

④ :安裝。把編譯生成的庫(kù)及相關(guān)頭文件安裝到nanomsg_x86_lib目錄中。

74d90d68-e3a1-11ec-ba43-dac502259ad0.png

7533fb60-e3a1-11ec-ba43-dac502259ad0.png

⑤ :讓生成的nanomsg動(dòng)態(tài)鏈接庫(kù)為系統(tǒng)所共享。ldconfig是一個(gè)動(dòng)態(tài)鏈接庫(kù)管理命令,其目的為了讓動(dòng)態(tài)鏈接庫(kù)為系統(tǒng)所共享。

查看生成的動(dòng)態(tài)庫(kù)是否是x86架構(gòu)的:

7554b1fc-e3a1-11ec-ba43-dac502259ad0.png

2、交叉編譯

在nanomsg根目錄下的CMakeLists.txt文件里加上交叉編譯器設(shè)置:

757ff60a-e3a1-11ec-ba43-dac502259ad0.png

然后輸入如下命令:

①cmake..-DCMAKE_INSTALL_PREFIX=$PWD/nanomsg_arm_lib
②cmake--build.
③sudocmake--build.--targetinstall
④sudoldconfig

與上面的編譯x86的nanomsg 庫(kù)的步驟差不多,這里把測(cè)試的指令ctest .去掉了,因?yàn)樯傻目蓤?zhí)行文件是arm架構(gòu)的,所以直接運(yùn)行測(cè)試會(huì)出錯(cuò)。

查看生成的動(dòng)態(tài)庫(kù)是否是arm架構(gòu)的:

75dd3c0c-e3a1-11ec-ba43-dac502259ad0.png

nanomsg使用例子

nanomsg可用于多線程、多進(jìn)程、多機(jī)通信。nanomsg是一個(gè)socket library,所以其應(yīng)用接口與標(biāo)準(zhǔn)的socket接口差不多,只是多了前綴nn_,如nn_socket、nn_close、nn_send、nn_recv等。關(guān)于socket可查閱往期筆記:

【socket筆記】TCP、UDP通信總結(jié)

【socket應(yīng)用】基于C語(yǔ)言的天氣客戶端的實(shí)現(xiàn)

下面演示進(jìn)程間通信的client-server的例子,以下測(cè)試代碼主要實(shí)現(xiàn)的是client-server進(jìn)行收發(fā)測(cè)試。

nanomsg_server.c:

#include
#include
#include
#include
#include
#include
#include
#include

#defineBUF_LEN100

char*url="tcp://127.0.0.1:2021";

intmain(void)
{
intserver_sock=0;
charbuf[BUF_LEN]={0};

if(server_sock=nn_socket(AF_SP,NN_PAIR)

nanomsg_client.c:

#include
#include
#include
#include
#include
#include
#include
#include

#defineBUF_LEN100

char*url="tcp://127.0.0.1:2021";

intmain(void)
{
intclient_sock=0;
charbuf[BUF_LEN]={0};

if(client_sock=nn_socket(AF_SP,NN_PAIR)0)
{
printf("recieveservermsg:%s
",buf);
}
memset(buf,0,BUF_LEN);
}

nn_close(client_sock);

return0;
}

編譯:

gccnanomsg_server.c-onanomsg_server-I/home/book/git_clone/nanomsg/build/nanomsg_x86_lib/include-L/home/book/git_clone/nanomsg/build/nanomsg_x86_lib/lib-lnanomsg
gccnanomsg_client.c-onanomsg_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:指定庫(kù)路徑。

-lnanomsg:鏈接動(dòng)態(tài)庫(kù)nanomsg.so。

運(yùn)行測(cè)試:

運(yùn)行可能會(huì)出現(xiàn)如下錯(cuò)誤:

760aa476-e3a1-11ec-ba43-dac502259ad0.png

不能找到共享庫(kù)文件libtest_d.so,加載失敗。因?yàn)橐话闱闆r下Linux會(huì)在/usr/lib路徑中搜索需要用到的庫(kù),而libtest_d.so庫(kù)并不在這個(gè)路徑下。

解決方法有兩種:一種就是把這個(gè)文件拷貝至/usr/lib路徑下,但是一般不允許這樣做,一般用戶也不允許往這個(gè)路徑里拷貝東西。另一種就是把當(dāng)前路徑增加為動(dòng)態(tài)庫(kù)的搜索路徑,命令如:

export LD_LIBRARY_PATH=/home/book/git_clone/nanomsg/build/nanomsg_x86_lib/lib:$LD_LIBRARY_PATH

然后繼續(xù)運(yùn)行:

763eb144-e3a1-11ec-ba43-dac502259ad0.png

可見,收發(fā)測(cè)試成功。以上就是本次關(guān)于nanomsg的簡(jiǎn)單使用分享,希望能對(duì)大家有幫助。

原文標(biāo)題:實(shí)用 | 一個(gè)高性能通信庫(kù)的簡(jiǎn)單使用分享

文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭靜

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210417
  • 網(wǎng)絡(luò)協(xié)議

    關(guān)注

    3

    文章

    269

    瀏覽量

    21638
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3408

    瀏覽量

    42714
  • 通信庫(kù)
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    5607

原文標(biāo)題:實(shí)用 | 一個(gè)高性能通信庫(kù)的簡(jiǎn)單使用分享

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    LC3網(wǎng)絡(luò)技術(shù)演講系列之一:基于VPP平臺(tái)的網(wǎng)絡(luò)服務(wù)優(yōu)化

    加解密等。這就需要提供一種進(jìn)程間通信的機(jī)制。這里有很多種選擇,比較直接的比如采用unix socket、netlink等,復(fù)雜一點(diǎn)采用TIPC等。我們采用了nanomsg來(lái)完成進(jìn)程間通信,主要考慮
    發(fā)表于 07-23 14:02 ?3532次閱讀

    分享一個(gè)高性能通信庫(kù)的簡(jiǎn)單使用技巧

    nanomsg簡(jiǎn)介 nanomsg是一個(gè)實(shí)現(xiàn)了幾種可擴(kuò)展協(xié)議的高性能通信庫(kù);可擴(kuò)展協(xié)議的任務(wù)是定義多個(gè)應(yīng)用系統(tǒng)如何通信,從而組成一個(gè)大的分布式系統(tǒng)。 下載鏈接: https://github.com
    的頭像 發(fā)表于 05-11 15:09 ?2413次閱讀
    分享一個(gè)高性能通信庫(kù)的簡(jiǎn)單使用技巧
    威尼斯人娱乐城线上赌场| 百家乐官网重要心态| 墨尔本百家乐官网的玩法技巧和规则| 百家乐筹码防伪套装| 澳门百家乐官网有限公司| 网上百家乐怎么赌能赢钱| 黄金城百家乐官网游戏| 百家乐游戏单机牌| 马牌百家乐官网娱乐城| 百家乐视频造假| 百家乐官网系统分析器| 新濠峰百家乐的玩法技巧和规则 | 足球百家乐系统| 太阳城百家乐官网娱乐官方网| 威尼斯人娱乐场钓鱼网站 | 沙龙百家乐代理| 百家乐官网排名| 大发888 娱乐| 网上百家乐官网作| 网络赌博| 至尊百家乐节目单| 博彩通百家乐官网概率| 阿玛尼百家乐的玩法技巧和规则 | 玉林市| 百家乐下| 百家乐官网荷官培训| 大发888扑克场| 百家乐官网正品| 沂水县| 威尼斯人娱乐城导航网| 百家乐官网博百家乐官网的玩法技巧和规则 | 足球赌网| 百家乐太阳城| 网上百家乐官网骗钱| 3d大赢家| 百家乐赌博筹码大不大| 百家乐官网路纸下| 皇冠网店| 实战百家乐十大取胜原因百分百战胜百家乐不买币不吹牛只你能做到按我说的.百家乐基本规则 | 租房做生意如何注意风水问题| 澳门百家乐官网赢钱|