如何实现在 C++ 和 Node.js 之间传递 JSON 数据?


C++ 是一种功能强大、高性能的语言,广泛用于系统级编程和应用程序。同时,Node.js 是一种开源的跨平台 JavaScript 运行时环境,通常用于 Web 应用程序。

通过了解 C++ 和 Node.js 之间传递 JSON 数据的各种方法,开发人员可以选择最适合其特定需求的方法。

在本教程中,我们将探讨在 C++ 应用程序和 Node.js 服务器之间传递 JSON 数据的各种方法。

三种常见方法:使用 RESTful API、使用消息队列和使用 WebSocket

用户可以按照以下步骤在 C++ 和 Node.js 之间传递 JSON 数据。

使用 RESTful API

使用 RESTful API 涉及用户在 Node.js 中创建一个 RESTful Web 服务,该服务公开一组供 C++ 交互的端点。然后,C++ 应用程序可以向这些端点发出 HTTP 请求以检索或更新 JSON 数据。

这种方法简单易于实现,但效率可能低于其他选项。

步骤 1 - 首先,用户需要在 Node.js 中创建一个 RESTful API

步骤 2 - 现在,开始从 C++ 发出 HTTP 请求。这可以使用 cURL 等 C++ 库来完成。用户可以在 C++ 应用程序中创建函数来处理请求。

示例 – RESTful API

以下是如何实现 RESTful API 方法的示例。

在 Node.js 中创建 RESTful API -

const express = require('express'); const app = express(); const data = {"message": "hello world"}; app.get('/getData', (req, res) => { res.json(data); }); app.post('/updateData', (req, res) => { data = req.body; res.json({ message: 'Data updated' }); }); app.listen(3000, () => { console.log('Server listening on port 3000'); });

从 C++ 发出 HTTP 请求 -

#include <curl/curl.h> #include <json/json.h> Json::Value getData() { CURL *curl; CURLcode res; Json::Value jsonData; curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:3000/getData"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &parseJson); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &jsonData); res = curl_easy_perform(curl); curl_easy_cleanup(curl); } return jsonData; } void updateData(Json::Value jsonData) { CURL *curl; CURLcode res; struct curl_slist *headers = NULL; std::string jsonString = jsonData.toStyledString(); headers = curl_slist_append(headers, "Content-Type: application/json"); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:3000/updateData"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonString.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); res = curl_easy_perform(curl); curl_easy_cleanup(curl); } }

使用函数 -

Json::Value jsonData = getData(); jsonData["newKey"] = "newValue"; updateData(jsonData);

输出

当用户访问“/getData”路由时,他们可以在控制台中看到以下输出。

{"message":"hello world"}

使用消息队列

使用消息队列涉及用户设置一个消息队列服务(例如 RabbitMQ),以充当 C++ 和 Node.js 应用程序之间的中间体。然后,C++ 应用程序可以向队列发送包含 JSON 数据的消息,Node.js 应用程序可以消费这些消息。

这种方法可以提供一种在两个应用程序之间发送数据更有效的方式,因为它允许异步通信并可以处理大量消息。

步骤 1 - 用户需要设置消息队列服务并将其配置为处理两个应用程序之间的通信。

步骤 2 - 现在,用户可以使用 AMQP-CPP 等 C++ 库向队列发送消息。

步骤 3 - 接下来,用户可以设置功能以使用 ample 等库从队列中消费消息。

使用 WebSocket

使用 WebSocket 涉及用户在 Node.js 中设置一个 WebSocket 服务器,并从 C++ 应用程序连接到它。这允许两个应用程序之间进行实时双向通信,JSON 数据通过 WebSocket 连接发送和接收。

这种方法可能比其他选项更有效,因为它允许低延迟通信,并且消除了 C++ 应用程序不断轮询新数据的需要。

步骤 1 - 用户需要在 Node.js 中设置一个 WebSocket 服务器,并从 C++ 应用程序连接到它。

步骤 2 - 建立 WebSocket 连接后,用户可以通过连接发送和接收 JSON 数据。

我们学习了几种在 C++ 和 Node.js 之间传递 JSON 数据的方法,每种方法都有其优点和缺点。

用户可以选择最适合其需求的方法,无论是简单的 RESTful API、用于高效通信的消息队列,还是用于实时双向通信的 WebSocket。

更新于: 2023年2月16日

2K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告