Flutter隔离服务插件shelf_serve_isolates的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter 隔离服务插件 shelf_serve_isolates 的使用

特性

  • 在多个隔离中启动货架服务器。
  • 在 Docker 容器中优雅地关闭。

使用方法

请参见 /example 文件夹中的示例代码。

import 'dart:async';

import 'package:shelf/shelf.dart';
import 'package:shelf_serve_isolates/shelf_serve_isolates.dart';

Future<void> serve({int port = 8080}) async {
  // 创建一个处理程序管道,添加中间件(如日志记录)并设置请求处理函数
  final handler = 
      const Pipeline().addMiddleware(logRequests()).addHandler(_echoRequest);

  // 启动具有多隔离的货架服务器
  await ServeWithMultiIsolates(
    handler: handler,
    address: 'localhost',
    port: port,
    onStart: (server) {
      // 当服务器启动时打印信息
      print('Serving at http://${server.address.host}:${server.port}');
    },
    onClose: (server) {
      // 当服务器关闭时打印信息
      print('server shutdown');
    },
  ).serve();
}

// 请求处理函数,返回请求的 URL
Future<Response> _echoRequest(Request request) async {
  return Response.ok('Request for "${request.url}"');
}

示例代码

以下是完整的示例代码,位于 example/shelf_serve_isolates_example.dart 文件中:

import 'dart:async';

import 'package:shelf/shelf.dart';
import 'package:shelf_serve_isolates/shelf_serve_isolates.dart';

// 启动服务器的函数
Future<void> serve({int port = 8080}) async {
  // 创建一个处理程序管道,添加中间件(如日志记录)并设置请求处理函数
  final handler = 
      const Pipeline().addMiddleware(logRequests()).addHandler(_echoRequest);

  // 启动具有多隔离的货架服务器
  await ServeWithMultiIsolates(
    handler: handler,
    address: 'localhost',
    port: port,
    onStart: (server) {
      // 当服务器启动时打印信息
      print('Serving at http://${server.address.host}:${server.port}');
    },
    onClose: (server) {
      // 当服务器关闭时打印信息
      print('server shutdown');
    },
  ).serve();
}

// 请求处理函数,返回请求的 URL
Future<Response> _echoRequest(Request request) async {
  return Response.ok('Request for "${request.url}"');
}

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

1 回复

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


当然,以下是如何在Flutter应用中使用shelf_serve_isolates插件的一个简单示例。shelf_serve_isolates插件允许你在Flutter应用中运行Dart HTTP服务器(基于Shelf框架),并且这些服务器运行在独立的Dart隔离区(isolate)中,从而不会阻塞UI线程。

首先,确保你已经在pubspec.yaml文件中添加了依赖:

dependencies:
  flutter:
    sdk: flutter
  shelf: ^1.2.0
  shelf_serve_isolates: ^0.2.0 # 请检查最新版本号

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

接下来,我们将编写一个简单的Flutter应用,该应用启动一个HTTP服务器,并在隔离区中处理请求。

main.dart

import 'package:flutter/material.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf_serve_isolates/shelf_serve_isolates.dart';

void main() {
  runApp(MyApp());

  // 启动HTTP服务器在隔离区中
  startHttpServer();
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Shelf Serve Isolates Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Shelf Serve Isolates Demo'),
      ),
      body: Center(
        child: Text('HTTP Server is running in an isolate!'),
      ),
    );
  }
}

void startHttpServer() async {
  // 定义HTTP服务器的处理器
  Handler helloHandler = (Request request) {
    return Response.ok('Hello, World!');
  };

  // 使用shelf创建一个处理器链
  var handler = Pipeline().addMiddleware(logRequests()).addHandler(helloHandler);

  // 启动服务器在隔离区中
  var isolateServer = await shelfIsolateServer(handler, port: 8080);

  // 输出服务器URL
  print('HTTP Server running at http://localhost:${isolateServer.port}');
}

解释

  1. 依赖管理:在pubspec.yaml中添加shelfshelf_serve_isolates依赖。
  2. 启动Flutter应用:在main.dart中,我们创建了一个简单的Flutter应用,该应用包含一个显示文本的主页面。
  3. 启动HTTP服务器:在main函数中,除了运行Flutter应用外,我们还调用了startHttpServer函数来启动HTTP服务器。
  4. 定义处理器:在startHttpServer函数中,我们定义了一个简单的处理器helloHandler,它返回"Hello, World!"响应。
  5. 创建处理器链:使用PipelinelogRequests中间件来包装处理器,以便于日志记录。
  6. 启动隔离区中的服务器:调用shelfIsolateServer函数启动服务器,并监听8080端口。该函数返回一个包含服务器端口信息的isolateServer对象。
  7. 输出服务器URL:打印服务器的URL,方便我们在浏览器中访问。

现在,当你运行Flutter应用时,它将在后台启动一个HTTP服务器,并且你可以通过访问http://localhost:8080来看到响应"Hello, World!"。由于服务器运行在隔离区中,它不会阻塞Flutter应用的UI线程。

回到顶部