2.2 服务通信

概念

以请求响应的方式实现不同节点之间数据交互的通信模式。

作用

用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。


需求

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

流程

在实现流程上,C++ 和 Python 实现的基本一致,大致步骤如下:

  • 编写消息载体(protobuf文件)并配置;

  • 编写发布方并配置;

  • 编写订阅方并配置;

  • 编译并执行。

准备

我们需要先准备作为数据载体的 proto 文件,在demo_base_proto目录下,新建文件:addints.proto,内容如下:

syntax = "proto2";
package apollo.cyber.demo_base_proto;

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

message AddInts_Response {
    required int64 sum = 1;
}

上述文件中,包含两种消息类型,AddInts_Request 是用于客户端向服务端发送请求的数据类型,AddInts_Response 是用于服务端向客户端发送响应的数据类型。

BUILD中添加如下内容:

proto_library(
    name = "addints_proto",
    srcs = ["addints.proto"]
)
cc_proto_library(
    name = "addints_proto_cc",
    deps = [
        ":addints_proto",
    ],
)
py_proto_library(
    name = "addints_proto_py",
    deps = [
        ":addints_proto",
    ],
)

验证文件编写是否正确,先编译:

bazel build cyber/demo_base_proto/...

如无异常,生成消息相关文件: addints.pb.h、addints.pb.cc和addints_pb2.py。

results matching ""

    No results matching ""