Flutter的web_socket_channel握手成功后如何接收返回数据
我在Flutter中使用web_socket_channel建立了WebSocket连接,已经成功完成了握手。现在想接收服务器返回的数据,但不知道具体该如何操作。请问应该使用哪个方法来监听和接收服务器发送的消息?能否提供一个简单的代码示例来说明如何正确处理这些返回数据?
2 回复
在Flutter中使用web_socket_channel接收返回数据,可以通过监听stream来实现。握手成功后,WebSocket会持续接收服务器发送的数据。
基本使用方法:
- 建立连接:
import 'package:web_socket_channel/web_socket_channel.dart';
final channel = WebSocketChannel.connect(
Uri.parse('wss://your-websocket-url'),
);
- 监听接收数据:
channel.stream.listen(
(message) {
// 处理接收到的数据
print('收到消息: $message');
// 如果是JSON数据可以解析
// var data = jsonDecode(message);
},
onError: (error) {
print('WebSocket错误: $error');
},
onDone: () {
print('WebSocket连接关闭');
},
);
完整示例:
import 'package:flutter/material.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
class WebSocketExample extends StatefulWidget {
@override
_WebSocketExampleState createState() => _WebSocketExampleState();
}
class _WebSocketExampleState extends State<WebSocketExample> {
late final WebSocketChannel channel;
List<String> messages = [];
@override
void initState() {
super.initState();
// 建立连接
channel = WebSocketChannel.connect(
Uri.parse('wss://echo.websocket.org'),
);
// 监听消息
channel.stream.listen(
(data) {
setState(() {
messages.add('收到: $data');
});
},
onError: (error) {
print('错误: $error');
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
itemCount: messages.length,
itemBuilder: (context, index) {
return ListTile(title: Text(messages[index]));
},
),
);
}
@override
void dispose() {
channel.sink.close(); // 关闭连接
super.dispose();
}
}
关键点:
channel.stream是一个Stream对象,通过listen()方法监听数据- 收到的数据自动转换为
String类型 - 记得在
dispose()中关闭连接 - 支持错误处理和连接关闭回调
这样就能持续接收WebSocket服务器发送的所有消息了。


