數(shù)據(jù)存儲新姿勢,華為云MySQL混合SSD盤實例正式發(fā)布~~
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)的,所以直接運行測試會出錯。
查看生成的動態(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)容。