nanomsg高性能通信庫的簡單實用分享丨【拜托了,物聯(lián)網(wǎng)!】

      網(wǎng)友投稿 1336 2022-05-29

      前言

      上次的推文實用 | 分享幾個非常實用的開源項目中有提到過nanomsg,正好最近的工作中也有用到nanomsg,本篇推文來簡單分享一下nanomsg的基本使用。

      nanomsg簡介

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

      下載鏈接:

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

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

      配對模式:簡單的一對一的通信;

      總線模式:簡單的多對多的通信;

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

      扇入模式:支持從多個源聚合請求消息;

      扇出模式:支持分配到多個節(jié)點以支持負載均衡;

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

      可擴展協(xié)議是在網(wǎng)絡(luò)通信協(xié)議之上實現(xiàn)的,當(dāng)前版本nanomsg支持以下幾種傳輸機制:

      INPROC:單進程內(nèi)通信;

      IPC:單機內(nèi)多進程的通信;

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

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

      nanomsg編譯/交叉編譯

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

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

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

      然后在build路徑下根據(jù)自己的需要輸入如下命令生成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 變量的值來指定這些文件應(yīng)該拷貝到哪個目錄,這里我們指定到當(dāng)前目錄的nanomsg_x86_lib目錄。

      ② :編譯。

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

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

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

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

      2、交叉編譯

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

      然后輸入如下命令:

      ① cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/nanomsg_arm_lib ② cmake --build . ③ sudo cmake --build . --target install ④ sudo ldconfig

      與上面的編譯x86的nanomsg 庫的步驟差不多,這里把測試的指令 ctest . 去掉了,因為生成的可執(zhí)行文件是arm架構(gòu)的,所以直接運行測試會出錯。

      nanomsg高性能通信庫的簡單實用分享丨【拜托了,物聯(lián)網(wǎng)!】

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

      nanomsg使用例子

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

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

      nanomsg_server.c:

      nanomsg_client.c:

      編譯:

      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:鏈接動態(tài)庫nanomsg.so。

      運行測試:

      運行可能會出現(xiàn)如下錯誤:

      不能找到共享庫文件 libtest_d.so ,加載失敗。因為一般情況下Linux會在 /usr/lib 路徑中搜索需要用到的庫,而 libtest_d.so 庫并不在這個路徑下。

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

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

      然后繼續(xù)運行:

      可見,收發(fā)測試成功。

      以上就是本次關(guān)于nanomsg的簡單使用分享,希望能對大家有幫助。

      【拜托了,物聯(lián)網(wǎng)!】有獎?wù)魑幕馃徇M行中:https://bbs.huaweicloud.com/blogs/299476

      IoT TCP/IP

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Java如何實現(xiàn)多線程場景下的線程安全
      下一篇:CAS單點登錄系列之原理簡單介紹
      相關(guān)文章
      成人亚洲国产精品久久| 国产亚洲人成在线播放| 一级毛片直播亚洲| 亚洲成av人在线观看网站| 中文字幕在线观看亚洲视频| 亚洲人妖女同在线播放| 亚洲中文字幕久在线| 亚洲伊人色一综合网| 亚洲一线产区二线产区精华| 亚洲av无码电影网| 狠狠色伊人亚洲综合网站色 | 亚洲午夜无码AV毛片久久| 亚洲成A人片在线观看无码3D| 午夜亚洲国产精品福利| 亚洲国产人成精品| 亚洲黄黄黄网站在线观看| 久久精品国产精品亚洲| 国产AV无码专区亚洲AV手机麻豆 | 亚洲国产精品综合久久20| 国产精品亚洲四区在线观看 | 亚洲成AV人片在线观看无码| 亚洲福利在线观看| 亚洲系列国产精品制服丝袜第| 亚洲白色白色永久观看| 亚洲一区在线视频| 亚洲欧美日韩综合久久久久| 亚洲爆乳无码精品AAA片蜜桃| 亚洲另类自拍丝袜第五页| 精品国产日韩亚洲一区在线| 亚洲午夜无码AV毛片久久| 亚洲色偷拍另类无码专区| 亚洲AV综合色区无码一区爱AV| 亚洲国产精品lv| 亚洲导航深夜福利| 亚洲影院天堂中文av色| 国产91成人精品亚洲精品| 怡红院亚洲怡红院首页| 亚洲Av无码精品色午夜 | 亚洲高清偷拍一区二区三区| 丝袜熟女国偷自产中文字幕亚洲| 亚洲a一级免费视频|