flutter如何实现SSE请求
在Flutter中如何实现SSE(Server-Sent Events)请求?我尝试使用http包和dart:io的HttpClient,但无法持续接收服务器推送的事件流。请问有没有现成的Flutter插件或最佳实践来实现SSE?需要处理连接中断重连和事件解析,求具体代码示例或实现思路。
2 回复
在Flutter中,使用http库发起SSE请求。创建Client,发送GET请求并设置Accept头为text/event-stream。通过监听响应流解析事件数据。
更多关于flutter如何实现SSE请求的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现SSE(Server-Sent Events)请求,可以通过以下两种常用方式:
1. 使用 http 包 + 流处理
import 'dart:async';
import 'package:http/http.dart' as http;
class SSEClient {
static Stream<String> subscribeToSSE(String url) async* {
final client = http.Client();
final request = http.Request('GET', Uri.parse(url));
// 设置SSE相关headers
request.headers['Accept'] = 'text/event-stream';
request.headers['Cache-Control'] = 'no-cache';
try {
final response = await client.send(request);
await for (var chunk in response.stream.transform(utf8.decoder)) {
final lines = chunk.split('\n');
for (var line in lines) {
if (line.startsWith('data: ')) {
final data = line.substring(6).trim();
if (data.isNotEmpty) {
yield data;
}
}
}
}
} finally {
client.close();
}
}
}
// 使用示例
void startSSE() {
SSEClient.subscribeToSSE('https://api.example.com/events')
.listen((data) {
print('收到事件: $data');
// 处理数据
}, onError: (error) {
print('SSE错误: $error');
});
}
2. 使用专门的 sse_client 包
首先添加依赖:
dependencies:
sse_client: ^2.0.0
然后使用:
import 'package:sse_client/sse_client.dart';
class SSEManager {
late SseClient client;
Future<void> connect(String url) async {
client = SseClient.connect(url);
client.stream.listen((message) {
print('收到消息: $message');
// 处理消息
}, onError: (error) {
print('连接错误: $error');
}, onDone: () {
print('连接关闭');
});
}
void disconnect() {
client.close();
}
}
主要特点:
- 自动重连:可以添加重连逻辑
- 错误处理:监听连接错误和完成事件
- 内存管理:及时关闭连接避免内存泄漏
- 数据解析:正确处理SSE格式(data: 前缀)
推荐使用专门的 sse_client 包,它封装了更多SSE协议细节,使用更简单可靠。

