Flutter gRPC服务插件pip_services4_grpc的使用

Flutter gRPC服务插件pip_services4_grpc的使用

Pip.Services Logo

该模块是Pip.Services多语言微服务工具包的一部分。

gRPC 模块用于通过gRPC协议组织同步数据交换。它包含了服务器和客户端两部分的实现。

该模块包含以下包:

  • Build - 用于创建gRPC服务的工厂
  • Clients - 基本的客户端组件,使用gRPC协议并通过命令模式进行通信
  • Controllers - 通过gRPC协议连接的基本服务实现,并使用命令模式

快速链接:

使用

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  pip_services4_grpc: version

现在你可以从命令行安装包:

pub get

开发

你需要安装以下开发环境:

  • Dart SDK 3
  • Visual Studio Code 或其他你选择的IDE
  • Docker

安装依赖:

pub get

运行自动化测试:

pub run test

生成API文档:

./docgen.ps1

在提交更改前,运行docker化构建和测试:

./build.ps1
./test.ps1
./clear.ps1

联系方式

Dart版本的Pip.Services由以下人员创建和维护:

  • Sergey Seroukhov
  • Levichev Dmitry

文档由以下人员编写:

  • Mark Makarychev
  • Levichev Dmitry

示例代码

以下是一个完整的示例代码,展示了如何使用pip_services4_grpc插件创建一个gRPC服务和客户端。

import 'package:pip_services4_components/pip_services4_components.dart';
import 'package:pip_services4_data/pip_services4_data.dart';

import './sample/DummyService.dart'; // 自定义的服务类
import 'controllers/DummyCommandableGrpcController.dart'; // 控制器类
import './clients/DummyCommandableGrpcClient.dart'; // 客户端类
import './sample/Dummy.dart'; // 数据模型

// 配置gRPC连接信息
var grpcConfig = ConfigParams.fromTuples([
  'connection.protocol',
  'http',
  'connection.host',
  'localhost',
  'connection.port',
  3002
]);

void main() async {
  DummyCommandableGrpcController controller;
  DummyCommandableGrpcClient client;

  var service = DummyService();

  // 初始化控制器
  controller = DummyCommandableGrpcController();
  controller.configure(grpcConfig);

  // 设置引用
  var references = References.fromTuples([
    Descriptor('pip-services-dummies', 'service', 'default', 'default', '1.0'),
    service,
    Descriptor('pip-services-dummies', 'controller', 'grpc', 'default', '1.0'),
    controller
  ]);
  controller.setReferences(references);
  
  // 打开控制器
  await controller.open(Context.fromTraceId('123'));

  // 初始化客户端
  client = DummyCommandableGrpcClient();

  client.configure(grpcConfig);
  client.setReferences(References());
  await client.open(Context.fromTraceId('123'));

  // 创建一个dummy对象
  var dummy1 = Dummy(id: '', key: 'Key 1', content: 'Content 1');
  var dummy = await client.createDummy(Context.fromTraceId('123'), dummy1);

  // 获取所有dummies
  var dummies = await client.getDummies(
      Context.fromTraceId('123'), FilterParams(), PagingParams(0, 5, false));

  // 更新dummy对象
  dummy!.content = 'Updated Content 1';
  dummy = await client.updateDummy(Context.fromTraceId('123'), dummy);

  // 删除dummy对象
  await client.deleteDummy(Context.fromTraceId('123'), dummy1.id!);

  // 尝试获取已删除的dummy对象
  dummy = await client.getDummyById(Context.fromTraceId('123'), dummy1.id!);

  // 关闭客户端和控制器
  await client.close(Context.fromTraceId('123'));
  await controller.close(Context.fromTraceId('123'));
}

更多关于Flutter gRPC服务插件pip_services4_grpc的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter gRPC服务插件pip_services4_grpc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


pip_services4_grpc 是一个用于在 Flutter 应用中实现 gRPC 服务的插件。它是 pip-services4 微服务工具包的一部分,旨在简化 gRPC 服务的开发和集成。以下是如何在 Flutter 项目中使用 pip_services4_grpc 的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 pip_services4_grpc 作为依赖项:

dependencies:
  pip_services4_grpc: ^0.0.1

然后运行 flutter pub get 来安装依赖。

2. 创建 gRPC 服务

接下来,你可以创建一个 gRPC 服务。假设你有一个简单的 HelloWorld 服务,它有一个 sayHello 方法。

syntax = "proto3";

package helloworld;

service HelloWorld {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

3. 生成 Dart 代码

使用 protoc 工具将 .proto 文件编译成 Dart 代码。确保你已经安装了 protocprotoc-gen-dart 插件。

protoc --dart_out=grpc:lib/src/generated -Iproto proto/helloworld.proto

这将在 lib/src/generated 目录下生成 Dart 代码。

4. 实现服务

在你的 Flutter 项目中实现 gRPC 服务。首先,创建一个服务类,继承自生成的 HelloWorldServiceBase

import 'package:pip_services4_grpc/pip_services4_grpc.dart';
import 'package:helloworld/helloworld.pb.dart';

class HelloWorldService extends HelloWorldServiceBase {
  @override
  Future<HelloReply> sayHello(ServiceCall call, HelloRequest request) async {
    return HelloReply()..message = 'Hello, ${request.name}!';
  }
}

5. 启动 gRPC 服务器

main.dart 中启动 gRPC 服务器。

import 'package:pip_services4_grpc/pip_services4_grpc.dart';
import 'package:flutter/material.dart';
import 'package:helloworld/helloworld.pb.dart';

void main() async {
  var grpcConfig = ConfigParams.fromTuples([
    'connection.protocol', 'http',
    'connection.host', 'localhost',
    'connection.port', 50051,
  ]);

  var service = HelloWorldService();
  var controller = GrpcController();
  controller.configure(grpcConfig);
  controller.register(service);

  await controller.open(null);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter gRPC Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter gRPC Demo'),
        ),
        body: Center(
          child: Text('gRPC server is running!'),
        ),
      ),
    );
  }
}

6. 运行应用

现在你可以运行你的 Flutter 应用,gRPC 服务器将在指定的端口上启动。

flutter run

7. 测试服务

你可以使用任何 gRPC 客户端来测试你的服务。例如,使用 grpcurl 工具:

grpcurl -plaintext -d '{"name": "World"}' localhost:50051 helloworld.HelloWorld/SayHello

你应该会收到以下响应:

{
  "message": "Hello, World!"
}
回到顶部