Flutter服务器发送事件客户端插件featurehub_sse_client的使用

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

Flutter服务器发送事件客户端插件 featurehub_sse_client 的使用

简介

featurehub_sse_client 是一个仅用于客户端的库,用于处理 EventSource 或者 Server-Sent Events (SSE)。它实现了 WHATWG 标准 中描述的接口。

该库是从 eventsource 库克隆而来,但由于关键更改无法合并到原项目中,因此发布了这个独立包,并去除了不完整的服务器功能,同时将库重命名为 featurehub_sse_client

由于 Dart 现在支持目标平台检测(区分 dart.io 和 dart.html),在浏览器环境中使用 dart:html / EventSource 会更加合适,因为它本就是为浏览器设计的。

客户端使用

创建一个新的 EventSource 客户端非常简单,只需调用一次即可。底层使用了 http 包,因此只要该包能够工作的地方,此库也能正常工作。浏览器环境下的使用略有不同。

示例代码

基础示例

import 'package:http/http.dart';
import 'package:featurehub_sse_client/eventsource.dart';

void main() async {
  // 在非浏览器环境下使用
  EventSource eventSource = await EventSource.connect("http://example.com/events");

  // 在浏览器环境下使用
  EventSource eventSourceBrowser = await EventSource.connect(
      "http://example.com/events", 
      client: BrowserClient()
  );

  // 添加监听器
  eventSource.stream.listen((event) {
    print('Received event: ${event.data}');
  });

  // 当第一个监听器添加时才连接,最后一个监听器移除时关闭连接
  EventSource eventSourceWithOptions = await EventSource.connect(
      "http://example.com/events",
      openOnlyOnFirstListener: true,
      closeOnLastListener: true
  );
}

高级使用案例

如果希望在流打开和关闭时监听事件,可以提供自己的 StreamController

import 'dart:async';
import 'package:http/http.dart';
import 'package:featurehub_sse_client/eventsource.dart';

void main() async {
  StreamController controller = StreamController();

  EventSource eventSource = await EventSource.connect(
      "http://example.com/events",
      streamController: controller
  );

  controller.stream.listen((event) {
    if (event is Event) {
      print('Event data: ${event.data}');
    } else if (event == EventSource.OPEN) {
      print('Connection opened');
    } else if (event == EventSource.CLOSED) {
      print('Connection closed');
    }
  });
}

更多关于Flutter服务器发送事件客户端插件featurehub_sse_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter服务器发送事件客户端插件featurehub_sse_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用featurehub_sse_client插件来接收服务器发送事件(Server-Sent Events, SSE)的示例代码。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  featurehub_sse_client: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来获取依赖。

2. 导入插件并初始化

在你的Flutter项目中,你需要导入featurehub_sse_client插件,并创建一个SSE客户端来连接到SSE服务器。

import 'package:flutter/material.dart';
import 'package:featurehub_sse_client/featurehub_sse_client.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SSE Client Demo'),
        ),
        body: SSEClientDemo(),
      ),
    );
  }
}

class SSEClientDemo extends StatefulWidget {
  @override
  _SSEClientDemoState createState() => _SSEClientDemoState();
}

class _SSEClientDemoState extends State<SSEClientDemo> {
  SSEClient? sseClient;
  List<String> events = [];

  @override
  void initState() {
    super.initState();
    initSSEClient();
  }

  void initSSEClient() {
    sseClient = SSEClient(
      url: Uri.parse('https://your-sse-server-url/event-stream'),  // 替换为你的SSE服务器URL
      onOpen: () {
        print('SSE connection opened');
      },
      onMessage: (event) {
        setState(() {
          events.add(event.data);
        });
        print('Received event: ${event.data}');
      },
      onError: (error) {
        print('SSE error: $error');
      },
      onClose: () {
        print('SSE connection closed');
      },
    );

    sseClient?.connect();
  }

  @override
  void dispose() {
    sseClient?.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text('Received Events:', style: TextStyle(fontSize: 18)),
          ...events.map((event) => Text(event)),
        ],
      ),
    );
  }
}

3. 运行应用

确保你的SSE服务器正在运行并发送事件,然后运行你的Flutter应用。你应该会在控制台中看到连接打开和接收事件的日志,同时在应用的界面上也会显示接收到的事件。

注意事项

  1. URL:替换https://your-sse-server-url/event-stream为你的SSE服务器URL。
  2. 错误处理:在实际应用中,你可能需要更复杂的错误处理和重连逻辑。
  3. 资源管理:确保在组件销毁时关闭SSE连接,以避免资源泄漏。

这个示例展示了如何使用featurehub_sse_client插件在Flutter应用中接收SSE事件。根据你的实际需求,你可能需要调整代码来处理不同的事件格式或添加更多的功能。

回到顶部