原文作者:medium.com/@mit.mit
发布时间:2018年3月23日 - 2分钟阅读
gRPC是一个高性能、开源的RPC框架。它提供了简单的服务定义,建立在http/2基础上,并支持双向流和完全集成的可插拔验证。gRPC框架支持广泛的语言,我们很高兴地宣布,对Dart语言的支持现在已经可以在测试版中使用了!Dart gRPC支持与Dart SDK,1.24.3或更高版本一起使用,目前支持Flutter和VM/Server平台。
创建服务器和编写gRPC服务定义
gRPC服务通常使用Protocol Buffers v3来描述它们的端点和数据序列化,下面是一个小的服务定义示例,它定义了一个服务 "Greeter",并带有一个单一的rpc消息 "SayHello"(两个消息中的数字 "1 "指定了消息字段的唯一ID)。
syntax = "proto3";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
一旦你定义了服务,你就可以自动生成服务器的骨架。
protoc --dart_out=grpc:generated --Iprotos protos/greeter
这将在生成的目录中产生一个GreeterServiceBase类,然后你可以将其子类化,以添加实际的服务实现。
class GreeterService extends GreeterServiceBase {
@override
Future<HelloReply> sayHello(ServiceCall call, HelloRequest request) async {
return new HelloReply()..message = 'Hello, ${request.name}!';
}
}
用一个gRPC客户端来调用服务器
当我们生成上面的服务存根时,protoc编译器也生成了一个客户端库。
///
// Generated code. Do not modify.
///
// ignore_for_file: non_constant_identifier_names,library_prefixes
library greeter_pbgrpc;
...
class GreeterClient extends Client {
...
ResponseFuture<HelloReply> sayHello(HelloRequest request,
{CallOptions options}) {
final call = $createCall(_$sayHello, new Stream.fromIterable([request]),
options: options);
return new ResponseFuture(call);
}
}
有了这个库,从客户端层调用服务就很简单了。
final client = new GreeterClient(channel);
try {
final request = new HelloRequest()..name = 'Michael';
final response = await client.sayHello(request);
print('Greeter client received: ${response.message}');
} catch (e) {
print('Caught error: $e');
}
当运行时,将打印出以下输出:
Greeter client received: Hello, Michael!
接下来的步骤
要在Dart中开始使用gRPC,请看我们新的Dart gRPC QuickStart,它引导你运行和扩展Greeter示例。接下来,请查看Dart gRPC教程。
如果你遇到任何问题,请提交一个问题。我们也很乐意听到你的反馈意见,你想看到的任何变化或增加的内容;例如,我们已经听到了一些支持gRPC-Web协议的请求。提供快速反馈的一个具体方法是在问题的最上面的评论上按GitHub的大拇指👍按钮,对问题进行 "投票"。
我们期待看到你用 gRPC for Dart 构建的东西。