Dart HttpConnectionsInfo
最后修改于 2025 年 4 月 4 日
Dart 中的 HttpConnectionsInfo 类提供有关活动 HTTP 服务器连接的信息。它是 dart:io 库的一部分。
此类可深入了解服务器性能和连接管理。它对于监视和调试 HTTP 服务器应用程序非常有用。
基本定义
HttpConnectionsInfo 是一个只读类,其中包含有关 HTTP 服务器连接的统计信息。它通常通过 HttpServer 访问。
关键属性包括活动连接数、空闲连接数和总连接数。这些指标有助于了解服务器负载。
基本的 HttpConnectionsInfo 用法
此示例显示了如何从服务器访问基本的连接信息。
main.dart
import 'dart:io';
void main() async {
var server = await HttpServer.bind('localhost', 8080);
server.listen((request) {
var info = server.connectionsInfo();
print('Active connections: ${info.active}');
request.response.write('Hello');
request.response.close();
});
}
我们创建一个 HTTP 服务器并在请求期间访问连接信息。active 属性显示当前正在处理的连接。
$ dart main.dart Active connections: 1
监视连接统计信息
此示例演示了定期监视连接统计信息。
main.dart
import 'dart:io';
import 'dart:async';
void main() async {
var server = await HttpServer.bind('localhost', 8080);
Timer.periodic(Duration(seconds: 5), (timer) {
var info = server.connectionsInfo();
print('''
Active: ${info.active}
Idle: ${info.idle}
Total: ${info.total}''');
});
server.listen((request) {
request.response.write('Monitoring');
request.response.close();
});
}
我们使用周期性计时器每 5 秒记录一次连接统计信息。这有助于跟踪服务器随时间的负载模式。
$ dart main.dart
Active: 0
Idle: 1
Total: 1
执行连接限制
此示例演示了如何使用 HttpConnectionsInfo 实现连接限制。
main.dart
import 'dart:io';
void main() async {
var server = await HttpServer.bind('localhost', 8080);
const maxConnections = 10;
server.listen((request) {
var info = server.connectionsInfo();
if (info.total >= maxConnections) {
request.response.statusCode = 503;
request.response.write('Server busy');
} else {
request.response.write('Processing');
}
request.response.close();
});
}
我们在处理每个请求之前检查总连接数。如果达到限制,我们将返回 503 Service Unavailable 响应。
$ dart main.dart
连接池分析
此示例分析了负载下的连接池行为。
main.dart
import 'dart:io';
import 'dart:async';
void main() async {
var server = await HttpServer.bind('localhost', 8080);
server.listen((request) async {
var info = server.connectionsInfo();
print('Before: Active=${info.active} Idle=${info.idle}');
await Future.delayed(Duration(seconds: 2));
request.response.write('Delayed response');
await request.response.close();
info = server.connectionsInfo();
print('After: Active=${info.active} Idle=${info.idle}');
});
}
我们在请求处理期间跟踪连接状态更改。延迟响应显示了连接如何在状态之间转换。
$ dart main.dart Before: Active=1 Idle=0 After: Active=0 Idle=1
服务器运行状况检查端点
此示例使用连接信息创建了一个运行状况检查端点。
main.dart
import 'dart:io';
import 'dart:convert';
void main() async {
var server = await HttpServer.bind('localhost', 8080);
server.listen((request) {
if (request.uri.path == '/health') {
var info = server.connectionsInfo();
var health = {
'active': info.active,
'idle': info.idle,
'total': info.total,
'status': info.active < 50 ? 'OK' : 'WARN'
};
request.response.headers.contentType = ContentType.json;
request.response.write(jsonEncode(health));
} else {
request.response.write('Main endpoint');
}
request.response.close();
});
}
我们通过 JSON 运行状况端点公开连接统计信息。这对于监视系统检查服务器状态非常有用。
$ curl https://:8080/health
{"active":1,"idle":0,"total":1,"status":"OK"}
最佳实践
- 定期监视:跟踪连接统计信息以进行容量规划
- 设置限制:使用连接阈值防止过载
- 分析模式:识别高峰使用时间
- 运行状况检查:为监视系统公开统计信息
来源
本教程通过实际示例介绍了 Dart 的 HttpConnectionsInfo 类,展示了监视、负载管理和运行状况检查功能。
作者
列出 所有 Dart 教程。