NNG和DDS

NNG (Nanomsg Next Generation)DDS (Data Distribution Service) 是兩種不同的通信協議,各自在不同場景下具有其優勢。下面我將對這兩種技術進行詳細解釋,并通過具體的例子來說明它們如何應用在實際場景中。


1. NNG (Nanomsg Next Generation)

NNG簡介

NNG 是 Nanomsg 的下一代實現,它是一個高效、輕量級的消息傳遞庫,主要用于 進程間通信(IPC)。它設計為低延遲、可擴展的分布式系統通信解決方案,支持多種通信模式,適用于需要高性能的應用。

主要特性:
  • 高性能:NNG 提供低延遲和高吞吐量的消息傳遞,非常適合實時和高頻率的通信。
  • 簡單的 API:NNG 的 API 設計簡潔易用,適合快速集成。
  • 靈活的通信模式:NNG 支持多種通信模式,如:
    • 推送-拉取(Push/Pull):適用于生產者與消費者模型。
    • 發布-訂閱(Pub/Sub):適用于廣播模式,發布者向多個訂閱者傳遞信息。
    • 請求-響應(Req/Rep):典型的客戶端-服務器模式。
    • 一對多(Survey):一個發布者向多個消費者發送請求。
  • 輕量級:NNG 的設計目標是小巧且高效,適合嵌入式系統或資源受限的環境。
NNG應用場景:
  • 實時數據交換:比如,在多任務系統中,多個任務需要頻繁地交換數據并且要求高效、低延遲。
  • 高頻通信:在金融領域的高頻交易系統中,NNG 可以處理高頻率的數據交換。
  • 嵌入式系統和物聯網:嵌入式系統中經常需要在資源有限的設備之間進行快速、低延遲的通信。
NNG通信模式例子:

假設我們有一個生產者和多個消費者,生產者每秒鐘生產一條消息,多個消費者對消息進行處理。我們可以使用 NNG 的 Push/Pull 模式來實現這種通信。

生產者(推送者)代碼:

#include <nng/nng.h>
#include <nng/protocol/pair0/pair.h>
#include <iostream>int main() {nng_socket sock;nng_pair0_open(&sock);nng_listen(sock, "ipc:///tmp/producer", NULL, 0);while (true) {const char *msg = "Hello, Consumer!";nng_send(sock, msg, strlen(msg) + 1, 0);std::cout << "Sent: " << msg << std::endl;}return 0;
}

消費者(拉取者)代碼:

#include <nng/nng.h>
#include <nng/protocol/pair0/pair.h>
#include <iostream>int main() {nng_socket sock;nng_pair0_open(&sock);nng_dial(sock, "ipc:///tmp/producer", NULL, 0);while (true) {char *msg = NULL;size_t size;nng_recv(sock, (void **)&msg, &size, 0);std::cout << "Received: " << msg << std::endl;nng_free(msg, size);}return 0;
}

解釋

  • 生產者通過 nng_send 將消息發送到 ipc:///tmp/producer 地址。
  • 消費者通過 nng_recv 從該地址接收消息。

這種模式適用于需要實時消息推送的場景,如物聯網設備間的數據交換。


2. DDS (Data Distribution Service)

DDS簡介

DDS 是一種 實時數據分發服務,專為大規模分布式系統設計。它采用 發布-訂閱(Pub/Sub)架構,不依賴于中心化的服務器,通過中間件進行高效、可靠的數據分發。DDS 設計上側重于提供高可靠性、低延遲和實時性。

主要特性:
  • 實時性和高可靠性:DDS 支持嚴格的實時性要求,并提供多種質量服務(QoS)策略,如延遲、帶寬、可靠性等。
  • 分布式架構:DDS 采用去中心化的架構,允許節點之間直接交換數據,不需要中心服務器。
  • 多播與點對點通信:支持點對點和多播通信方式,適應不同的數據傳輸需求。
  • 質量服務(QoS):通過配置 QoS 策略,DDS 可以控制數據的傳輸行為(例如,可靠性、順序性、延遲等)。
  • 可擴展性:DDS 適用于大規模分布式系統,能夠處理成千上萬的節點。
DDS應用場景:
  • 實時控制系統:如自動駕駛、飛行控制系統、工業自動化等,數據需要及時、可靠地傳輸。
  • 分布式仿真:例如在軍事、航天等領域的分布式仿真系統中,多個計算節點之間需要共享實時數據。
  • 物聯網(IoT):在物聯網環境中,多個設備之間需要進行實時數據交換并保持高可靠性。
DDS通信模式例子:

假設我們有一個分布式仿真系統,其中多個仿真節點需要交換傳感器數據。使用 DDS 進行數據發布和訂閱。

發布者(傳感器數據)代碼:

#include <dds/dds.hpp>
#include <iostream>struct SensorData {int id;float temperature;float humidity;
};int main() {dds::domain::DomainParticipant participant(0);dds::topic::Topic<SensorData> topic(participant, "SensorDataTopic");dds::pub::Publisher publisher(participant);dds::pub::DataWriter<SensorData> writer(publisher, topic);SensorData data;data.id = 1;data.temperature = 23.5f;data.humidity = 60.0f;while (true) {writer.write(data);std::cout << "Sent: " << data.id << " " << data.temperature << " " << data.humidity << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));}return 0;
}

訂閱者(接收數據)代碼:

#include <dds/dds.hpp>
#include <iostream>struct SensorData {int id;float temperature;float humidity;
};int main() {dds::domain::DomainParticipant participant(0);dds::topic::Topic<SensorData> topic(participant, "SensorDataTopic");dds::sub::Subscriber subscriber(participant);dds::sub::DataReader<SensorData> reader(subscriber, topic);while (true) {dds::sub::LoanedSamples<SensorData> samples = reader.take();for (const auto& sample : samples) {if (sample.info().valid()) {std::cout << "Received: " << sample.data().id << " " << sample.data().temperature << " " << sample.data().humidity << std::endl;}}}return 0;
}

解釋

  • 發布者將傳感器數據(如溫度和濕度)寫入到 DDS 的 SensorDataTopic 主題。
  • 訂閱者訂閱該主題并接收傳感器數據。

DDS 允許多節點之間的實時、可靠的數據交換,而無需中心化的服務。


NNG與DDS的對比

特性NNGDDS
通信模型點對點、發布-訂閱、請求-響應等發布-訂閱
可靠性基本可靠,依賴于消息傳輸機制高度可靠,支持 QoS 策略
實時性低延遲,高吞吐高實時性,嚴格的 QoS 支持
拓撲點對點、星型、網狀結構等去中心化,支持大規模分布式系統
應用場景實時通信、高頻交易、嵌入式系統分布式仿真、物聯網、自動駕駛等
擴展性較弱,適合小到中型系統強,支持大規模分布式系統

總結

  • NNG:適用于低延遲、高吞吐的局部通信,尤其適合進程間通信和小規模分布式系統。它提供了多種靈活的

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81259.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自制操作系統day7(獲取按鍵編碼、FIFO緩沖區、鼠標、鍵盤控制器(Keyboard Controller, KBC)、PS/2協議)

day7 獲取按鍵編碼&#xff08;hiarib04a&#xff09; void inthandler21(int *esp) {struct BOOTINFO *binfo (struct BOOTINFO *) ADR_BOOTINFO; // 獲取系統啟動信息結構體指針unsigned char data, s[4]; // data: 鍵盤數據緩存&#x…

Javase 基礎加強 —— 09 IO流第二彈

本系列為筆者學習Javase的課堂筆記&#xff0c;視頻資源為B站黑馬程序員出品的《黑馬程序員JavaAI智能輔助編程全套視頻教程&#xff0c;java零基礎入門到大牛一套通關》&#xff0c;章節分布參考視頻教程&#xff0c;為同樣學習Javase系列課程的同學們提供參考。 01 緩沖字節…

服務器操作系統調優內核參數(方便查詢)

fs.aio-max-nr1048576 #此參數限制并發未完成的異步請求數目&#xff0c;應該設置避免I/O子系統故障 fs.file-max1048575 #該參數決定了系統中所允許的文件句柄最大數目&#xff0c;文件句柄設置代表linux系統中可以打開的文件的數量 fs.inotify.max_user_watches8192000 #表…

[Windows] 格式工廠 FormatFactory v5.20.便攜版 ——多功能媒體文件轉換工具

想要輕松搞定各類媒體文件格式轉換&#xff1f;這款 Windows 平臺的格式工廠 FormatFactory v5.20 便攜版 正是你的不二之選&#xff01;無需安裝&#xff0c;即開即用&#xff0c;為你帶來高效便捷的文件處理體驗。 全能格式轉換&#xff0c;滿足多元需求 軟件功能覆蓋視頻、…

[AI]主流大模型、ChatGPTDeepseek、國內免費大模型API服務推薦(支持LangChain.js集成)

主流大模型特色對比表 模型核心優勢適用場景局限性DeepSeek- 數學/代碼能力卓越&#xff08;GSM8K準確率82.3%&#xff09;1- 開源生態完善&#xff08;支持醫療/金融領域&#xff09;7- 成本極低&#xff08;API價格僅為ChatGPT的2%-3%&#xff09;5科研輔助、代碼開發、數據…

國際薦酒師(香港)協會亮相新西蘭葡萄酒巡展深度參與趙鳳儀大師班

國際薦酒師&#xff08;香港&#xff09;協會率團亮相2025新西蘭葡萄酒巡展 深度參與趙鳳儀MW“百年百碧祺”大師班 廣州/上海/青島&#xff0c;2025年5月12-16日——國際薦酒師&#xff08;香港&#xff09;協會&#xff08;IRWA&#xff09;近日率專業代表團出席“純凈獨特&…

Node.js Express 項目現代化打包部署全指南

Node.js Express 項目現代化打包部署全指南 一、項目準備階段 1.1 依賴管理優化 # 生產依賴安裝&#xff08;示例&#xff09; npm install express mongoose dotenv compression helmet# 開發依賴安裝 npm install nodemon eslint types/node --save-dev1.2 環境變量配置 /…

java基礎知識回顧3(可用于Java基礎速通)考前,面試前均可用!

目錄 一、基本算數運算符 二、自增自減運算符 三、賦值運算符 四、關系運算符 五、邏輯運算符 六、三元運算符 七、 運算符的優先級 八、小案例&#xff1a;在程序中接收用戶通過鍵盤輸入的數據 聲明&#xff1a;本文章根據黑馬程序員b站教學視頻做的筆記&#xff0c;可…

隨機密碼生成器:原理、實現與應用(多語言實現)

在當今數字化的時代&#xff0c;信息安全至關重要。而密碼作為保護個人和敏感信息的第一道防線&#xff0c;其安全性直接關系到我們的隱私和數據安全。然而&#xff0c;許多人在設置密碼時往往使用簡單、易猜的組合&#xff0c;如生日、電話號碼或常見的單詞&#xff0c;這使得…

TypeScript 泛型講解

如果說 TypeScript 是一門對類型進行編程的語言&#xff0c;那么泛型就是這門語言里的&#xff08;函數&#xff09;參數。本章&#xff0c;我將會從多角度講解 TypeScript 中無處不在的泛型&#xff0c;以及它在類型別名、對象類型、函數與 Class 中的使用方式。 一、泛型的核…

SQL 每日一題(6)

繼續做題&#xff01; 原始表&#xff1a;employee_resignations表 employee_idresignation_date10012022-03-1510022022-11-2010032023-01-0510042023-07-1210052024-02-28 第一題&#xff1a; 查詢累計到每個年度的離職人數 結果輸出&#xff1a;年度、當年離職人數、累計…

工業RTOS生態重構:從PLC到“端 - 邊 - 云”協同調度

一、引言 在當今數字化浪潮席卷全球的背景下&#xff0c;工業領域正經歷著深刻變革。工業自動化作為制造業發展的基石&#xff0c;其技術架構的演進直接關系到生產效率、產品質量以及企業的市場競爭力。傳統的PLC&#xff08;可編程邏輯控制器&#xff09;架構雖然在工業控制領…

從版本控制到協同開發:深度解析 Git、SVN 及現代工具鏈

前言&#xff1a;在當今軟件開發的浪潮中&#xff0c;版本控制與協同開發無疑扮演著舉足輕重的角色。從最初的單兵作戰到如今大規模團隊的高效協作&#xff0c;一套成熟且得力的版本控制系統以及圍繞其構建的現代工具鏈&#xff0c;已然成為推動軟件項目穩步前行的關鍵引擎。今…

Visual Studio Code插件離線安裝指南:從市場獲取并手動部署

Visual Studio Code插件離線安裝指南&#xff1a;從市場獲取并手動部署 一、場景背景二、操作步驟詳解步驟1&#xff1a;訪問官方插件市場步驟2&#xff1a;定位目標版本步驟3&#xff1a;提取關鍵參數步驟4&#xff1a;構造下載鏈接步驟5&#xff1a;下載與安裝 三、注意事項 …

用HTML5實現實時ASCII藝術攝像頭

用HTML5實現實時ASCII藝術攝像頭 項目簡介 這是一個將攝像頭畫面實時轉換為ASCII字符藝術的Web應用&#xff0c;基于HTML5和原生JavaScript實現。通過本項目可以學習到&#xff1a; 瀏覽器攝像頭API的使用Canvas圖像處理技術實時視頻流處理復雜DOM操作性能優化技巧 功能亮點…

論文審稿之我對SCI寫作的思考

有幸被邀請審過二區、三區、四區期刊的論文&#xff0c;近期審稿10余篇&#xff0c;分享一下我從一個審稿人的角度出發&#xff0c;如何提升自己寫作的質量。 作圖高清和好看&#xff0c;永遠是排第一位。圖中的字要清晰&#xff0c;有的放大200%還看不清字&#xff1b;每幅圖的…

MLA:Transformer的智能變形金剛——解密多頭潛在注意力的進化密碼

第一章 MLA的進化之路&#xff1a;從MHA到智能變形 1.1 變形金剛的誕生背景 當LLM模型規模突破萬億參數量級時&#xff0c;傳統Transformer的注意力機制開始顯現"成長的煩惱"&#xff1a;訓練階段計算密集、推理階段內存吃緊。DeepSeek團隊的MLA如同給注意力模塊裝…

電子電路:電學都有哪些核心概念?

電子是基本粒子,帶負電荷。電荷是物質的一種屬性,電子帶有負電荷,而質子帶有正電荷。電荷的單位是庫侖。 電流呢,應該是指電荷的流動,單位是安培,也就是庫侖每秒。所以電流其實就是電荷在導體中的移動形成的。比如,當電子在導線中流動時,就形成了電流。不過要注意,傳…

第三次中醫知識問答模型微調

本次參數 llamafactory-cli train \ --stage sft \ --do_train True \ --model_name_or_path /home/qhyz/zxy/LLaMA-Factory/model \ --preprocessing_num_workers 16 \ --finetuning_type lora \ --template deepseek3 \ --flash_attn fa2 \ --dataset_dir data \ --dataset …

leetcode2081. k 鏡像數字的和-hard

1 題目&#xff1a;k 鏡像數字的和 官方標定難度&#xff1a;難 一個 k 鏡像數字 指的是一個在十進制和 k 進制下從前往后讀和從后往前讀都一樣的 沒有前導 0 的 正 整數。 比方說&#xff0c;9 是一個 2 鏡像數字。9 在十進制下為 9 &#xff0c;二進制下為 1001 &#xff…