女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分享一個高性能通信庫的簡單使用技巧

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

掃碼添加小助手

加入工程師交流群

nanomsg簡介

nanomsg是一個實現了幾種可擴展協議的高性能通信庫;可擴展協議的任務是定義多個應用系統如何通信,從而組成一個大的分布式系統。

下載鏈接:

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

當前版本nanomsg支持以下協議:

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

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

請求/回復模式:支持組建大規模的集群服務來處理用戶請求;

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

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

調查模式:允許在一個單一的請求里檢查多個應用的狀態;

可擴展協議是在網絡通信協議之上實現的,當前版本nanomsg支持一下網絡協議:

INPROC:單進程內通信;

IPC:單機內多進程的通信;

TCP:通過tcp協議的網絡通信;

nanomsg用c實現,不依賴系統特性,所以支持多個操作系統

nanomsg編譯/交叉編譯

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

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

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

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

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

然后在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目錄。

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

② :編譯。

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

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

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

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

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

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

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

查看生成的動態庫是否是x86架構的:

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

2、交叉編譯

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

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 庫的步驟差不多,這里把測試的指令ctest 。去掉了,因為生成的可執行文件是arm架構的,所以直接運行測試會出錯。

查看生成的動態庫是否是arm架構的:

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

nanomsg使用例子

nanomsg可用于多線程、多進程、多機通信。nanomsg是一個socket library,所以其應用接口與標準的socket接口差不多,只是多了前綴nn_,如nn_socket、nn_close、nn_send、nn_recv等。關于socket可查閱往期筆記:

【socket筆記】TCP、UDP通信總結

【socket應用】基于C語言的天氣客戶端的實現

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

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:指定庫路徑。

-lnanomsg:鏈接動態庫nanomsg.so。

運行測試:

運行可能會出現如下錯誤:

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

不能找到共享庫文件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

然后繼續運行:

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

可見,收發測試成功。以上就是本次關于nanomsg的簡單使用分享,希望能對大家有幫助。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1404

    瀏覽量

    81191
  • IPC
    IPC
    +關注

    關注

    3

    文章

    367

    瀏覽量

    53265

原文標題:實用 | 一個高性能通信庫的簡單使用分享

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    隨著物聯網技術的不斷發展,無線通信模塊在各種應用場景中扮演著越來越重要的角色。近日,藍科迅通科技宣布推出款基于Nordic Semiconductor的Wi-Fi 6芯片nRF7002和高性能雙核
    發表于 06-28 21:42

    使用樹莓派構建 Slurm 高性能計算集群:分步指南!

    在這篇文章中,我將分享我嘗試使用樹莓派構建Slurm高性能計算集群的經歷。段時間前,我開始使用這個集群作為測試平臺,來創建更大的、支持GPU計算的
    的頭像 發表于 06-17 16:27 ?604次閱讀
    使用樹莓派構建 Slurm <b class='flag-5'>高性能</b>計算集群:分步指南!

    NC403(C50)高性能噪聲二極管現貨庫存

    NC403(C50)高性能噪聲二極管現貨庫存NC403(C50)是Noisecom推出的高性能微波噪聲二極管,專為射頻和微波應用設計。NC403(C50)采用C50封裝,適用于需要表面貼裝
    發表于 06-03 10:31

    高性能計算面臨的芯片挑戰

    解決的難題或大型問題。過去40年來,這項技術助力科學和工程領域取得了重大發現。如今,高性能計算正處于轉折點,政府、研究人員和科技行業今天的選擇可能會影響
    的頭像 發表于 05-27 11:08 ?444次閱讀
    <b class='flag-5'>高性能</b>計算面臨的芯片挑戰

    LMH6522 高性能四路DVGA技術手冊

    LMH6522包含四高性能數控可變增益放大器(DVGA)。它被設計用于窄帶和寬帶中頻采樣應用。通常,LMH6522在廣泛的混合信號和數字通信應用中驅動高性能ADC,例如需要自動增益控
    的頭像 發表于 05-09 09:37 ?317次閱讀
    LMH6522 <b class='flag-5'>高性能</b>四路DVGA技術手冊

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

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

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

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

    適用于SQLite的dbExpress數據驅動程序

    驅動程序作為獨立。由于數據訪問層薄而簡單,dbExpress 提供高性能數據連接性,并且更加易于部署。 適用于 SQLite 的 dbExpress 驅動程序提供對 SQLite
    的頭像 發表于 02-09 09:45 ?454次閱讀

    SciChart—高性能的JavaScript圖表和圖形

    使用 SciChart 的 JavaScript 圖表為您的 JS 應用程序發現終極解決方案。 使用 WebGL 創建動態、高速的圖表和圖形,非常適合實時處理復雜的數據可視化。使用我們強大而靈活
    的頭像 發表于 01-22 10:15 ?755次閱讀
    SciChart—<b class='flag-5'>高性能</b>的JavaScript圖表和圖形<b class='flag-5'>庫</b>

    鴻蒙原生頁面高性能解決方案上線OpenHarmony社區 助力打造高性能原生應用

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

    使用Python進行串口通信的案例

    當然!以下是使用Python進行串口通信簡單示例。這個示例展示了如何配置串口、發送數據以及接收數據。我們將使用 pyserial
    的頭像 發表于 11-22 09:11 ?1518次閱讀

    簡單認識libmodbus開發

    libmodbus是免費的跨平臺Modbus,支持RTU和TCP,遵循LGPL V2.1+協議,兼容Linux、Mac OS X、FreeBSD、QNX和Windows等操作系統。它可通過串口
    的頭像 發表于 11-13 15:42 ?1095次閱讀
    <b class='flag-5'>簡單</b>認識libmodbus開發<b class='flag-5'>庫</b>

    移遠通信推出八款高性能天線新品

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

    摩爾線程開源高性能線性代數模板MUTLASS

    近日,摩爾線程宣布開源高性能線性代數模板MUTLASS,以便開發者能夠更高效針對摩爾線程全功能GPU的MUSA Core及Tensor Core等單元進行編程,加速基于國產GPU的算子開發以及算法創新。
    的頭像 發表于 11-13 11:53 ?806次閱讀

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

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