一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

FPGA之家 ? 來(lái)源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2021-05-11 15:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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編譯/交叉編譯

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

c5709ade-b20b-11eb-bf61-12bb97331649.png

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

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

c5963032-b20b-11eb-bf61-12bb97331649.png

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

1、編譯

① cmake 。。 -DCMAKE_INSTALL_PREFIX=$PWD/nanomsg_x86_lib

② cmake --build 。

③ ctest 。

④ sudo cmake --build 。 --target install

⑤ sudo ldconfig

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

c5a066e2-b20b-11eb-bf61-12bb97331649.png

② :編譯。

c5b1746e-b20b-11eb-bf61-12bb97331649.png

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

c5bd8f9c-b20b-11eb-bf61-12bb97331649.png

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

c6396428-b20b-11eb-bf61-12bb97331649.png

c647ed5e-b20b-11eb-bf61-12bb97331649.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)的:

c65214fa-b20b-11eb-bf61-12bb97331649.png

2、交叉編譯

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

c6622048-b20b-11eb-bf61-12bb97331649.png

然后輸入如下命令:

① cmake 。。 -DCMAKE_INSTALL_PREFIX=$PWD/nanomsg_arm_lib

② cmake --build 。

③ sudo cmake --build 。 --target install

④ sudo ldconfig

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

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

c6943862-b20b-11eb-bf61-12bb97331649.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 《stdio.h》

#include 《pthread.h》

#include 《stdlib.h》

#include 《string.h》

#include 《unistd.h》

#include 《nanomsg/pair.h》

#include 《nanomsg/bus.h》

#include 《nanomsg/nn.h》

#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!

”);

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: %s

”, buf);

if (nn_send(server_sock, buf, sizeof(buf), 0) 《 0)

{

printf(“send failed!

”);

nn_close(server_sock);

exit(EXIT_FAILURE);

}

}

}

nn_close(server_sock);

return 0;

}

nanomsg_client.c:

#include 《stdio.h》

#include 《pthread.h》

#include 《stdlib.h》

#include 《string.h》

#include 《unistd.h》

#include 《nanomsg/pair.h》

#include 《nanomsg/bus.h》

#include 《nanomsg/nn.h》

#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!

”);

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!

”);

nn_close(client_sock);

}

memset(buf, 0, BUF_LEN);

if (nn_recv(client_sock, buf, sizeof(buf), 0) 》 0)

{

printf(“recieve server msg: %s

”, 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:指定庫(kù)路徑。

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

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

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

c6e21852-b20b-11eb-bf61-12bb97331649.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)行:

c70990b2-b20b-11eb-bf61-12bb97331649.png

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

編輯:jq

聲明:本文內(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)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1402

    瀏覽量

    80923
  • IPC
    IPC
    +關(guān)注

    關(guān)注

    3

    文章

    365

    瀏覽量

    53110

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    高性能低功耗雙核Wi-Fi6+BLE5.3二合

    隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,無(wú)線通信模塊在各種應(yīng)用場(chǎng)景中扮演著越來(lái)越重要的角色。近日,藍(lán)科迅通科技宣布推出款基于Nordic Semiconductor的Wi-Fi 6芯片nRF7002和高性能雙核
    發(fā)表于 06-28 21:42

    使用樹莓派構(gòu)建 Slurm 高性能計(jì)算集群:分步指南!

    在這篇文章中,我將分享我嘗試使用樹莓派構(gòu)建Slurm高性能計(jì)算集群的經(jīng)歷。段時(shí)間前,我開始使用這個(gè)集群作為測(cè)試平臺(tái),來(lái)創(chuàng)建個(gè)更大的、支持GPU計(jì)算的
    的頭像 發(fā)表于 06-17 16:27 ?460次閱讀
    使用樹莓派構(gòu)建 Slurm <b class='flag-5'>高性能</b>計(jì)算集群:分步指南!

    LMH6522 高性能四路DVGA技術(shù)手冊(cè)

    LMH6522包含四個(gè)高性能數(shù)控可變?cè)鲆娣糯笃鳎―VGA)。它被設(shè)計(jì)用于窄帶和寬帶中頻采樣應(yīng)用。通常,LMH6522在廣泛的混合信號(hào)和數(shù)字通信應(yīng)用中驅(qū)動(dòng)高性能ADC,例如需要自動(dòng)增益控
    的頭像 發(fā)表于 05-09 09:37 ?260次閱讀
    LMH6522 <b class='flag-5'>高性能</b>四路DVGA技術(shù)手冊(cè)

    300x32mm玻璃鋼天線:高性能通信解決方案

    深圳安騰納天線|300x32mm玻璃鋼天線:高性能通信解決方案
    的頭像 發(fā)表于 02-27 09:03 ?446次閱讀

    多頻段白色蝴蝶天線:通信領(lǐng)域的高性能解決方案

    深圳安騰納天線|多頻段白色蝴蝶天線:通信領(lǐng)域的高性能解決方案
    的頭像 發(fā)表于 02-21 09:07 ?481次閱讀

    適用于SQLite的dbExpress數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序

    驅(qū)動(dòng)程序作為獨(dú)立庫(kù)。由于數(shù)據(jù)訪問(wèn)層薄而簡(jiǎn)單,dbExpress 提供高性能數(shù)據(jù)庫(kù)連接性,并且更加易于部署。 適用于 SQLite 的 dbExpress 驅(qū)動(dòng)程序提供對(duì) SQLite
    的頭像 發(fā)表于 02-09 09:45 ?413次閱讀

    鴻蒙原生頁(yè)面高性能解決方案上線OpenHarmony社區(qū) 助力打造高性能原生應(yīng)用

    隨著HarmonyOS NEXT的正式推出,鴻蒙原生應(yīng)用開發(fā)熱度高漲,數(shù)量激增。但在三方應(yīng)用鴻蒙化進(jìn)程中,性能問(wèn)題頻出。為此,HarmonyOS NEXT推出了整套原生頁(yè)面高性能解決方案,包括
    發(fā)表于 01-02 18:00

    使用Python進(jìn)行串口通信的案例

    當(dāng)然!以下是個(gè)使用Python進(jìn)行串口通信簡(jiǎn)單示例。這個(gè)示例展示了如何配置串口、發(fā)送數(shù)據(jù)以及接收數(shù)據(jù)。我們將使用 pyserial 庫(kù),
    的頭像 發(fā)表于 11-22 09:11 ?1409次閱讀

    簡(jiǎn)單認(rèn)識(shí)libmodbus開發(fā)庫(kù)

    libmodbus是個(gè)免費(fèi)的跨平臺(tái)Modbus庫(kù),支持RTU和TCP,遵循LGPL V2.1+協(xié)議,兼容Linux、Mac OS X、FreeBSD、QNX和Windows等操作系統(tǒng)。它可通過(guò)串口
    的頭像 發(fā)表于 11-13 15:42 ?1005次閱讀
    <b class='flag-5'>簡(jiǎn)單</b>認(rèn)識(shí)libmodbus開發(fā)<b class='flag-5'>庫(kù)</b>

    移遠(yuǎn)通信推出八款高性能天線新品

    近日,全球物聯(lián)網(wǎng)整體解決方案的領(lǐng)軍者移遠(yuǎn)通信再度發(fā)力,宣布正式推出八款全新高性能天線產(chǎn)品,進(jìn)步壯大了其天線產(chǎn)品家族的陣容。此舉旨在更好地滿足全球客戶對(duì)于高品質(zhì)天線的廣泛需求,并持續(xù)引領(lǐng)物聯(lián)網(wǎng)領(lǐng)域
    的頭像 發(fā)表于 11-13 13:47 ?1039次閱讀

    摩爾線程開源高性能線性代數(shù)模板庫(kù)MUTLASS

    近日,摩爾線程宣布開源高性能線性代數(shù)模板庫(kù)MUTLASS,以便開發(fā)者能夠更高效針對(duì)摩爾線程全功能GPU的MUSA Core及Tensor Core等單元進(jìn)行編程,加速基于國(guó)產(chǎn)GPU的算子開發(fā)以及算法創(chuàng)新。
    的頭像 發(fā)表于 11-13 11:53 ?762次閱讀

    兼具高性能和低功耗,物奇微自研RISC-V高性能通信Wi-Fi 6芯片

    論壇上,物奇微自研RISC-V高性能通信的Wi-Fi 6 芯片WQ9201獲得推介。 ? 重慶物奇微電子股份有限公司CTO林豪表示,物奇微成立于2016年,在重慶、上海、長(zhǎng)沙、香港、深圳等地設(shè)有研發(fā)
    的頭像 發(fā)表于 08-19 16:47 ?3419次閱讀
    兼具<b class='flag-5'>高性能</b>和低功耗,物奇微自研RISC-V<b class='flag-5'>高性能</b><b class='flag-5'>通信</b>Wi-Fi 6芯片

    帶你了解什么是高性能計(jì)算(HPC)

    受益于HPC更高的速度處理大量數(shù)據(jù)的能力,全球正在進(jìn)入HPC大周期,高性能計(jì)算的發(fā)展水平已經(jīng)成為衡量個(gè)國(guó)家綜合實(shí)力和高科技發(fā)展水平的重要標(biāo)志,美國(guó)、歐盟、日本、英國(guó)都高度重視高性能計(jì)
    的頭像 發(fā)表于 07-20 08:28 ?1292次閱讀
    帶你了解什么是<b class='flag-5'>高性能</b>計(jì)算(HPC)

    Memcached介紹和詳解

    ,Memcached可以顯著減輕后端數(shù)據(jù)庫(kù)和Web服務(wù)器的負(fù)載。 Memcached作為個(gè)高性能的內(nèi)存緩存系統(tǒng),通過(guò)緩存經(jīng)常訪問(wèn)的數(shù)據(jù)來(lái)提高應(yīng)用
    發(fā)表于 07-17 15:58

    2.4G無(wú)線收發(fā)SOC芯片 XL2409,高性能、低功耗,集成大資源32位MCU

    XL2409 是高性能、低功耗的 SIP 集成無(wú)線收發(fā)芯片。片內(nèi)集成32位M0+核MCU,RF 工作在 2.400~2.483GHz世界通用 ISM 頻段,集成了射頻接收器、射頻發(fā)射器、頻率綜合
    發(fā)表于 07-12 15:54