[Dart翻译]宣布正式支持Dart的gRPC。

622 阅读2分钟

原文地址:medium.com/dartlang/an…

原文作者:medium.com/@mit.mit

发布时间:2018年3月23日 - 2分钟阅读

image.png

gRPC是一个高性能、开源的RPC框架。它提供了简单的服务定义,建立在http/2基础上,并支持双向流和完全集成的可插拔验证。gRPC框架支持广泛的语言,我们很高兴地宣布,对Dart语言的支持现在已经可以在测试版中使用了!Dart gRPC支持与Dart SDK,1.24.3或更高版本一起使用,目前支持FlutterVM/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 翻译