首页 > 其他分享 >服务通信

服务通信

时间:2023-07-09 22:24:17浏览次数:32  
标签:服务 proto cc demo 通信 cyber addints base

 

/*
    服务通信:
        以请求响应的方式实现不同节点之间数据交互的通信模式
        用于偶然的、对实时性有要求、有一定逻辑处理需求的数据传输场景


    需求:
        客户端发送请求提交两个整型数字,服务端处理请求提取两个数字求和,并将结果响应回客户端

    步骤:
        消息载体protobuf
        服务端
        客户端
        编译并执行

*/

////////////////////////proto/////////////////////////////////////
// demo_base_proto目录下新建addints.proto


syntax = "proto2";

package apollo.cyber.demo_base_proto;

message AddInts_Request{
    requried int64 num1 = 1;
    requried int64 num2 = 2;
}

message AddInts_response{
    requried int64 sum = 1;
}

//////////////////////////////////////////////////////////////////

//////////////////////////BUILD///////////////////////////////////

proto_library(
    name = "addints_proto",
    srcs = ["addints.proto"]
)

cc_library(
    name = "addints_cc",
    deps = [":addints_proto"]
)


//////////////////////////////////////////////////////////////////

// 编译:bezal build cyber/demo_base_proto/...




///////////////////////////////服务端cpp//////////////////////////

// demo_cc目录下新建c++文件demo03_server.cc
/*
        1.包含头文件
        2.初始化
        3.创建节点
        4.创建服务方
        5.数据处理
        6.等待关闭
*/

#include "cyber/cyber.h"
#include "cyber/demo_base_proto/addints.pb.h"
using apollo::cyber::demo_base_proto::AddInts_Request;
using apollo::cyber::demo_base_proto::AddInts_response;

void cb(const shared_ptr<AddInts_Request>& request,
        const shared_ptr<AddInts_Response>& response){
    int64_t num1 = request->num1();
    int64_t num2 = request->num2();

    AINFO << "客户端请求num1 = " << num1 << ", num2 = " << num2;

    // 求和并设置响应

    int64_t sum = num1 + num2;
    response->set_sum(sum);
}

int main(int argc, char* argv[])
{
    apollo::cyber::Init(argv[0]);
    AINFO << "服务端执行...";

    // 创建节点
    auto server_node = apollo::cyber::CreateNode("server_node");
    // 创建服务方
    auto server = node->CreateService<AddInts_Request, AddInts_Response>("addints", cb);


    // 数据处理

    // 等待关闭
    apollo::cyber::WaitForShutdown();

    return 0;
}
/////////////////////////////////////////////////////////////////////////////

////////////////////////////服务方BUILD//////////////////////////////////////

cc_binary(
    name = "demo03_server_cc",
    srcs = ["demo03_server.cc"],
    deps = [
            "//cyber",
            "//cyber/demo_base_proto:addints_cc"]
)
/////////////////////////////////////////////////////////////////////////////

// 编译:bezal build cyber/demo_cc/...
// source cyber/setup.bash  // 刷新环境变量

/////////////////////////////客户端cpp/////////////////////////////////////
// demo_cc目录下新建c++文件demo04_client.cc

/*
        1.包含头文件
        2.初始化cyber
        3.创建节点
        4.创建客户端
        5.发送数据
        6.等待关闭
*/
#include "cyber/cyber.h"
#include "cyber/demo_base_proto/addints.pb.h"
using apollo::cyber::demo_base_proto::AddInts_Request;
using apollo::cyber::demo_base_proto::AddInts_response;


int main(int arc, char* argv[])
{
    apollo::cyber::Init(argv[0]);
    if(argc != 3)
    {
        AINFO << "执行程序时请输入两个数字作为参数";
        return 1;
    }
    AINFO << "客户端...";
    // 创建节点
    auto client_node = apollo::cyber::CreateNode("client_node");
    // 创建客户端
    auto client = client_node->CreateClient<AddInts_Request, AddInts_Reponse>("addints");


    // 发送数据
    AINFO << "等待服务启动...";

    auto request = std::make_shared<AddInts_Request>();
    request->set_num1(atoll(argv[1]));
    request->set_num2(atoll(argv[2]));

    AINFO << "发送num1 = " << request->num1() << ", num2 = " << request->num2();

    auto response = client->SendRequest(request);

    // 处理响应

    AINFO << "响应结果为:" << request->sum();

    // 等待关闭
    apollo::cyber::WaitForShutdown();


    return 0;
}
////////////////////////////////////////////////////////////////////

/////////////////////////客户端BUILD////////////////////////////////

cc_binary(
    name = "demo04_client_cc",
    srcs = ["demo04_client.cc"],
    deps = [
            "//cyber",
            "//cyber/demo_base_proto:addints_cc"]
)

///////////////////////////////////////////////////////////////////

// 编译:bezal build cyber/demo_cc/...
// source cyber/setup.bash  // 刷新环境变量


/*
    执行
        ./bezal-bin/cyber/demo_cc/demo03_server_cc
        ./bezal-bin/cyber/demo_cc/demo04_client_cc


*/

 

标签:服务,proto,cc,demo,通信,cyber,addints,base
From: https://www.cnblogs.com/WTSRUVF/p/17539541.html

相关文章

  • [STM32]STM32双机串口通信
    [STM32]STM32双机串口通信上一篇的通信方案在发送端高强度通信下寄了,发现是函数HAL_UART_Transmit()的锅,一个函数居然能跑0.3s左右。。。于是打算选用DMA收发数据,但是DMA在接收数据时遇到一些玄学问题,于是改用DMA发送数据,串口IDLE中断接收数据的策略。cubeMX配置接收端部分开......
  • springcloudalibaba -nacos config 配置中心以及服务发现和注册
    springcloud-config-nacos-client3377pom<!--nacos-config--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>&l......
  • feign 微服务调用,post请求如何在URL 后面带参数
    ​ 在Feign微服务调用中,可以通过在URL后面添加参数来进行POST请求。参数可以以两种方式传递:作为路径参数或查询参数。 路径参数:可以将参数添加到URL的路径中,并使用@PathVariable注解来获取参数的值。例如:@FeignClient(name="example-service")publicinterfaceExample......
  • 配置Nexus 3服务器作为Nuget包的仓库
    1、进入Nexus的Web界面在右上角点“Login”根据提示,去服务器上查看初始密码root@dns-server:/mnt/data#cdnexus-dataroot@dns-server:/mnt/data/nexus-data#lsadmin.passwordcacheelasticsearchgenerated-bundlesjavaprefskeystoreslogport......
  • 优化Web服务器流量-Varnish
    1.使用Varnish缓存静态内容1.1描述Varnish流量大的Web服务器通常需要卸载部分工作负载以维持其命中率并为客户提供可接受的响应时间。Varnish缓存是一个网络加速器,你部署在这样的网络服务器前。而不是直接访问web服务器,web客户端联系Varnish。Varnish代表这些客户端从后端web服......
  • Cesium学习笔记3——加载地图服务
    申请成为天地图开发者,创建应用 编写代码:<!DOCTYPEhtml><htmllang="en"><head><!--Usecorrectcharacterset.--><metacharset="utf-8"/><!--TellIEtousethelatest,bestversion.--><......
  • YouTube 要求开源应用停止服务
    导读YouTube是全球最大的视频平台,很多开发者都会围绕这个平台开发各种各样的第三方功能/服务(例如视频下载、广告拦截、倍速播放等等),从而提升视频观看体验。Invidious则是YouTube的一个免费开源替代品,能让用户在观看YouTube视频的同时不被Google追踪,避免数据被......
  • 无线通信技术集合
    一、概要介绍随着物联网的广泛应用,无线通信将扮演窄带通信主角,未来将会离不了无线射频技术。二、NB-IOT1、NB-IOT专业名词缩略语:  1)IOT:internetofthing;  2)NB-IOT:narrowbandinternetofthing;  3)IMEI:internationalmobileequipmentidentity国际移动设备识别码;......
  • 基于 Sa-Token 实现微服务登录鉴权实战
    简介Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权等一系列权限相关问题。官网地址:https://sa-token.cc/SpringBoot微服务实战1、创建项目在IDEA中新建一个SpringBoot项目,命名:sa-token-d......
  • [STM32]STM32双机蓝牙串口通信
    [STM32]STM32双机蓝牙串口通信期末考完力,虽然GPA--,但也终于有空搓一搓32了蓝牙模块配置我们先配置蓝牙模块,需要主从兼容,配置过程可以参考这个博客:https://blog.csdn.net/m0_59113542/article/details/122028037?spm=1001.2014.3001.5506cubeMX配置然后就是MX里的配置。PS:两......