Dart WebSocketStatus
最后修改于 2025 年 4 月 4 日
Dart 中的 WebSocketStatus 类提供了 WebSocket 连接状态的常量。它用于检查 WebSocket 连接的当前状态。
WebSocketStatus 包含表示不同连接阶段的静态整数值。这些值有助于管理 WebSocket 的生命周期事件和错误处理。
基本定义
WebSocketStatus 是一个包含 WebSocket 连接状态静态常量的类。它是 Dart 的 dart:io 库的一部分。
关键状态码包括连接中、已打开、正在关闭和已关闭的状态。还有异常关闭和协议错误的码。
检查连接状态
此示例展示了如何检查基本的 WebSocket 连接状态。
import 'dart:io';
void main() async {
var socket = await WebSocket.connect('ws://echo.websocket.org');
if (socket.readyState == WebSocketStatus.open) {
print('Connection is open');
} else if (socket.readyState == WebSocketStatus.connecting) {
print('Still connecting');
}
await socket.close();
}
我们连接到 WebSocket 服务器,并将其 readyState 与 WebSocketStatus 常量进行比较。已打开状态表示连接成功。
$ dart main.dart Connection is open
处理连接错误
此示例演示了如何检查异常关闭状态。
import 'dart:io';
void main() async {
try {
var socket = await WebSocket.connect('ws://invalid.url');
} on WebSocketException catch (e) {
print('Connection failed: ${e.message}');
if (e.inner?.readyState == WebSocketStatus.abnormalClosure) {
print('Abnormal closure detected');
}
}
}
我们尝试连接到无效的 URL 并捕获 WebSocketException。内部套接字的 readyState 显示了异常关闭的状态。
$ dart main.dart Connection failed: Connection failed Abnormal closure detected
监控状态变更
此示例展示了如何跟踪 WebSocket 状态的转换。
import 'dart:io';
void main() async {
var socket = await WebSocket.connect('ws://echo.websocket.org');
print('Initial state: ${socket.readyState}');
socket.listen(
(data) => print('Data received'),
onDone: () {
print('Final state: ${socket.readyState}');
if (socket.readyState == WebSocketStatus.closed) {
print('Connection closed normally');
}
}
);
await socket.close();
}
我们监控 WebSocket 从打开到关闭的状态变化。onDone 回调在连接关闭后检查最终状态。
$ dart main.dart Initial state: 1 Final state: 3 Connection closed normally
协议错误处理
此示例演示了如何检查协议错误。
import 'dart:io';
void main() async {
try {
var socket = await WebSocket.connect('ws://echo.websocket.org');
// Force protocol violation
socket.add('Invalid binary data');
await socket.close();
} on WebSocketException catch (e) {
if (e.inner?.readyState == WebSocketStatus.protocolError) {
print('Protocol error occurred');
}
}
}
我们通过发送无效数据故意导致协议违规。异常处理程序会检查 protocolError 状态码。
$ dart main.dart Protocol error occurred
连接生命周期跟踪
此示例展示了如何跟踪所有可能的 WebSocket 状态。
import 'dart:io';
void printState(int state) {
switch (state) {
case WebSocketStatus.connecting:
print('Connecting');
break;
case WebSocketStatus.open:
print('Open');
break;
case WebSocketStatus.closing:
print('Closing');
break;
case WebSocketStatus.closed:
print('Closed');
break;
default:
print('Unknown state');
}
}
void main() async {
var socket = await WebSocket.connect('ws://echo.websocket.org');
printState(socket.readyState);
socket.add('Hello');
await socket.close();
printState(socket.readyState);
}
我们创建了一个辅助函数,用于将状态码转换为人类可读的字符串。这显示了从连接到关闭的完整连接生命周期。
$ dart main.dart Open Closed
最佳实践
- 状态检查:在发送数据之前,始终验证连接状态
- 错误处理:优雅地处理所有可能的错误状态
- 清理:完成后正确关闭连接
- 监控:跟踪状态更改以进行调试
来源
本教程涵盖了 Dart 的 WebSocketStatus 类,并通过实际示例展示了 WebSocket 的连接监控、错误处理和状态管理。
作者
列出 所有 Dart 教程。