您当前的位置: 首页 >  c++

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

c++ rpc调用nodejs

qianbo_insist 发布时间:2022-09-11 08:12:37 ,浏览量:0

rpc

远程过程调用,就是调用远程服务器上的方法,返回结果,将需要运行的函数或者进程放到远程服务器上去执行,降低本地服务的能耗。

安装thrift

windows下面直接下载可执行文件就行了 产生cpp文件 ./thrift-0.16.0.exe --gen cpp camera.idl.txt 产生nodejs文件 ./thrift-0.16.0.exe --gen js:node camera.idl.txt 这样nodejs 的定义和c++的定义声明都自动产生了 在这里插入图片描述

nodejs 端

先要安装thrift npm install thrift --save

使用nodejs编写服务端

const thrift = require('thrift');
const cService = require('./gen-nodejs/CameraService.js');

const cameras = {};
const server = thrift.createServer(cService, {
 addCamera: function (camera, result) {
   cameras[camera.id] = camera
   console.log("camera add:", camera, " current:", camera)
   result(null)
 },
 getCamera: function (id, result) {
   console.log("get:", id)
   result(null, cameras[id])
 }
});

server.listen(5600);
console.log('server start at 5600');

在这里插入图片描述

使用c++ 写一个客户端

#include 
#include 
#include 
#include 

#pragma comment(lib, “libthrift.lib”)
using namespace ::apache::thrift;
using namespace ::apache::thrift::protocol;
using namespace ::apache::thrift::transport;
using namespace ::apache::thrift::server;

using boost::shared_ptr;

#pragma comment(lib,“libthrift.lib”)//链接库文件

int main(int argc, char** argv) {
int port = 5600;
boost::shared_ptr socket(new TSocket(“127.0.0.1”, port));
boost::shared_ptr transport(new TBufferedTransport(socket));
boost::shared_ptr protocol(new TBinaryProtocol(transport));
Camera came;
came.id ="1001";
came.name ="D1 hik";
came.ssrc ="13200001";
try {
	transport->open();

	client.addCamera(came);
    camera came = client.getCamera();
	transport->close();
}
catch (TException& tx) {
	printf("ERROR:%s\n", tx.what());
}
getchar();
return 0;
}

以上客户端代码为伪代码,读者自行根据生成的代码去做就行,nodejs和c++建立通道后就可以进行通信,如果不需要远程过程调用,只是消息通信,可以使用zeromq

使用zeromq 和buttonrpc

zeromq使用订阅发布的方式,比较简单

建立zeromq的buttonrpc

buttonrpc建立在zeromq基础之上

#include "buttonrpc.hpp"
#include 
struct camera
{
string camera;
string name;
uint32_t ssrc;
}
 unordered_map g_maps;
string camera_find(uint32_t  cameraid){
	return g_maps[cameraid];
}
 
int main()
{
	buttonrpc server;
	server.as_server(6000);
 
	server.bind("camera_find", camera_find);
	server.run();
 
	return 0;
}
#include 
#include "buttonrpc.hpp"
 
int main()
{
	buttonrpc client;
	client.as_client("127.0.0.1", 6000);
	camera a = client.call("camera_find", 2, 3);
	std::cout             
关注
打赏
1663161521
查看更多评论
0.0462s