Flutter RPC服务插件pip_services3_rpc的使用

Flutter RPC服务插件pip_services3_rpc的使用

Pip.Services Logo
Dart中的远程过程调用 (RPC)

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

rpc 模块提供了通过本地调用或HTTP(S)协议进行同步通信。它包含服务器端和客户端实现。

模块包含以下包:

  • Auth - 认证和授权组件
  • Build - HTTP服务工厂
  • Clients - 从微服务配置中检索连接设置并为这些设置提供客户端和服务机制
  • Connect - 用于检索基于HTTP的服务和客户端的连接的帮助模块
  • Services - 通过HTTP/REST协议连接的基本服务实现,并在HTTP上使用命令模式

快速链接

使用

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

dependencies:
  pip_services3_rpc: ^x.x.x

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

flutter pub get

开发

前提条件

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

安装依赖项

flutter pub get

运行自动化测试

flutter pub run test

生成API文档

./docgen.ps1

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

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

联系方式

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

  • Sergey Seroukhov
  • Levichev Dmitry
  • Aleksey Dvoykin

文档由以下人员编写:

  • Mark Makarychev
  • Levichev Dmitry

示例代码

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

import 'package:pip_services3_commons/pip_services3_commons.dart';
import './Dummy.dart';
import './DummyController.dart';
import './DummyCommandableHttpService.dart';
import './DummyCommandableHttpClient.dart';

void main() async {
  // 配置服务
  var restConfig = ConfigParams.fromTuples([
    'connection.protocol',
    'http',
    'connection.host',
    'localhost',
    'connection.port',
    3000
  ]);

  DummyCommandableHttpService service;
  DummyCommandableHttpClient client;

  // 创建控制器
  var ctrl = DummyController();

  // 初始化服务
  service = DummyCommandableHttpService();
  service.configure(restConfig);

  // 设置引用
  var references = References.fromTuples([
    Descriptor(
        'pip-services-dummies', 'controller', 'default', 'default', '1.0'),
    ctrl,
    Descriptor('pip-services-dummies', 'service', 'http', 'default', '1.0'),
    service
  ]);
  service.setReferences(references);

  // 打开服务
  await service.open(null);

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

  client.configure(restConfig);
  client.setReferences(References());
  await client.open(null);

  // 创建一个示例对象
  var dummy1 = Dummy.from(null, 'Key 1', 'Content 1');
  var dummy2 = Dummy.from(null, 'Key 2', 'Content 2');

  // 创建一个dummy对象
  try {
    var dummy = await client.createDummy(null, dummy1);
    // 处理创建后的对象
    dummy1 = dummy!;
  } catch (err) {
    // 错误处理
  }

  // 创建另一个dummy对象
  try {
    var dummy = await client.createDummy(null, dummy2);
    // 处理第二个创建后的对象
    dummy2 = dummy!;
  } catch (err) {
    // 错误处理
  }

  // 获取所有dummy对象
  try {
    var dummies = await client.getDummies(
        null, FilterParams(), PagingParams(0, 5, false));
    // 处理接收到的对象
  } catch (err) {
    // 错误处理
  }

  // 更新dummy对象
  try {
    dummy1.content = 'Updated Content 1';
    var dummy = await client.updateDummy(null, dummy1);
    // 处理更新后的对象
    dummy1 = dummy!;
  } catch (err) {
    // 错误处理
  }

  // 删除dummy对象
  try {
    await client.deleteDummy(null, dummy1.id!);
  } catch (err) {
    // 错误处理
  }

  // 尝试获取已删除的dummy对象
  try {
    var dummy = await client.getDummyById(null, dummy1.id!);
    // 处理已删除的对象
  } catch (err) {
    // 错误处理
  }

  // 关闭服务和客户端
  await client.close(null);
  await service.close(null);
}

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

1 回复

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


pip_services3_rpc 是一个用于在 Dart/Flutter 应用中实现 RPC(远程过程调用)服务的插件。它是 pip_services3 组件库的一部分,旨在简化微服务架构中的通信。以下是如何在 Flutter 项目中使用 pip_services3_rpc 插件的步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 pip_services3_rpc 依赖:

dependencies:
  flutter:
    sdk: flutter
  pip_services3_rpc: ^1.0.0

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

2. 创建 RPC 服务

接下来,你可以创建一个简单的 RPC 服务。以下是一个示例:

import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';

class MyRpcService extends RestService {
  MyRpcService() {
    baseRoute = '/my_service';
  }

  [@override](/user/override)
  void register() {
    registerRoute('GET', '/greeting', null, (RequestParams params) async {
      return await _greeting(params);
    });
  }

  Future<String> _greeting(RequestParams params) async {
    var name = params.getAsString('name') ?? 'World';
    return 'Hello, $name!';
  }
}

3. 配置和启动服务

main.dart 文件中,你可以配置并启动 RPC 服务:

import 'package:flutter/material.dart';
import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_components/pip_services3_components.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';

import 'my_rpc_service.dart';

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

  var service = MyRpcService();
  service.configure(config);

  await service.open(null);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter RPC Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter RPC Demo'),
        ),
        body: Center(
          child: Text('RPC Service is running!'),
        ),
      ),
    );
  }
}

4. 测试 RPC 服务

你可以使用 curl 或 Postman 等工具来测试 RPC 服务。例如:

curl http://localhost:8080/my_service/greeting?name=Flutter

你应该会得到以下响应:

"Hello, Flutter!"

5. 关闭服务

在应用关闭时,确保关闭 RPC 服务:

[@override](/user/override)
void dispose() {
  service.close(null);
  super.dispose();
}
回到顶部