ZBLOG

有代码例子吗

当然,下面是一个简单的gRPC示例代码:

首先,定义服务接口和消息结构。创建一个名为 example.proto 的文件,并添加以下内容:

syntax = "proto3";

package example;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloResponse) {}
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

然后,使用protobuf工具编译器生成C++源代码。打开终端,在proto文件所在目录执行以下命令:

protoc -I=./ --cpp_out=./ ./example.proto

这将会生成两个文件:example.pb.hexample.pb.cc

接下来,实现服务端。创建一个名为 server.cpp 的文件,并添加以下内容:

#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
#include "example.pb.h"
#include "example.grpc.pb.h"

using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;

class GreeterServiceImpl final : public example::Greeter::Service {
    Status SayHello(ServerContext* context, const example::HelloRequest* request,
                    example::HelloResponse* response) override {
        std::string prefix("Hello ");
        response->set_message(prefix + request->name());
        return Status::OK;
    }
};

void RunServer() {
    std::string server_address("0.0.0.0:50051");
    GreeterServiceImpl service;

    ServerBuilder builder;
    builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
    builder.RegisterService(&service);

    std::unique_ptr<Server> server(builder.BuildAndStart());
    std::cout << "Server listening on " << server_address << std::endl;
    server->Wait();
}

int main() {
    RunServer();
    return 0;
}

最后,实现客户端。创建一个名为 client.cpp 的文件,并添加以下内容:

#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
#include "example.pb.h"
#include "example.grpc.pb.h"

using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
using example::Greeter;
using example::HelloRequest;
using example::HelloResponse;

class GreeterClient {
public:
    GreeterClient(std::shared_ptr<Channel> channel)
        : stub_(Greeter::NewStub(channel)) {}

    std::string SayHello(const std::string& name) {
        HelloRequest request;
        request.set_name(name);

        HelloResponse response;

        ClientContext context;

        Status status = stub_->SayHello(&context, request, &response);

        if (status.ok()) {
            return response.message();
        } else {
            return "RPC failed";
        }
    }

private:
    std::unique_ptr<Greeter::Stub> stub_;
};

int main() {
    std::string target("localhost:50051");
    
    GreeterClient client(grpc::CreateChannel(target, grpc::InsecureChannelCredentials()));
    
    std::string user("John");
    
    std::string reply = client.SayHello(user);
    
    std::cout << "Reply: " << reply << std::endl;

   return 0;
}

以上代码演示了一个简单的gRPC服务端和客户端,在服务端上接收一个名称参数,返回包含问候消息的响应。

你可以编译并运行服务端和客户端代码,观察输出结果。注意在编译时需要链接gRPC和Protobuf库。

这只是一个简单的示例,实际开发中可能涉及更复杂的场景和功能。请参考官方文档以获得更详细的信息。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=17547

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?