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 构建的东西。
www.deepl.com 翻译
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!