用grpc_cb代替grpc++
jinq0123/grpc_cb
是 Google gRpc 的C++库。
它依赖于 grpc, 采用回调接口,简化了使用,用来代替 grpc++ 库。
使用简介如下。
定义服务
用 proto 文件定义服务:
// See examples/protos/route_guide.proto.
syntax = "proto3";
package routeguide;
// Interface exported by the server.
service RouteGuide {
// A simple RPC.
rpc GetFeature(Point) returns (Feature) {}
}
message Point {
int32 latitude = 1;
int32 longitude = 2;
}
message Feature {
string name = 1;
Point location = 2;
}
生成服务器和客户端代码
详见:examples/protos/generate.bat
protoc.exe -I . --cpp_out=../cpp_cb/route_guide route_guide.proto
protoc.exe -I . --grpc_out=../cpp_cb/route_guide --plugin=protoc-gen-grpc=grpc_cpp_cb_plugin.exe route_guide.proto
在examples/cpp_cb/route_guide/ 生成以下文件:
-
route_guide.pb.h
, 消息类定义 -
route_guide.pb.cc
, 消息类实现 -
route_guide.grpc_cb.pb.h
, 服务类定义 -
route_guide.grpc_cb.pb.cc
, 服务类实现
生成的命名空间RouteGuide
将包含
- 客户端使用的
Stub
类. - 需服务器实现的
Service
类.
客户端调用RPC
同步调用
ChannelSptr channel(new Channel("localhost:50051"));
Stub stub(channel);
Point point = MakePoint(0, 0);
Feature feature;
Status status = stub.BlockingGetFeature(point, &feature);
异步调用
stub.AsyncGetFeature(point,
[](const Feature& feature) {
cout
服务器实现
- 先实现服务类
class RouteGuideImpl final : public routeguide::RouteGuide::Service {
public:
void GetFeature(const Point& point,
const GetFeature_Replier& replier) override {
Feature feature;
feature.set_name("...");
replier.Reply(feature);
}
}
GetFeature()
不必立即应答,可复制保存replier后直接返回,
待应答内容准备完成后,再调用Reply()
.
- 开启服务
Server svr;
svr.AddListeningPort("0.0.0.0:50051");
RouteGuideImpl service(db_path);
svr.RegisterService(service);
svr.BlockingRun();
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
hi,我是熵减,见字如面。 微服务是一种软件架构风格,其旨在通过将应用程序拆分为小型、独立的服务,来增强应用程序的可伸缩性、可维护性和可测试性。 虽然微服务可以为软件开发提供许多好处,但它们并不总是适用于所有情况的最佳选择。 换句话说,微服务架构,也不是软件工…