feat: 增加链路统计信息,两个链路分别显示在前端,D向A汇报D与B的信息

This commit is contained in:
Mock
2026-04-09 13:38:10 +08:00
parent e72f7f3fd9
commit 11e67282c7
19 changed files with 573 additions and 40 deletions

View File

@@ -6,6 +6,7 @@ static void kcpserver_usage(FILE *out) {
fprintf(out, "usage: kcpserver [-mode hub|relay] [-listen addr] [-bind-device dev]\n");
fprintf(out, " [-latency-log path] [-kcp-ts-debug-log path]\n");
fprintf(out, " [-kcp-session-stats-log path] [-kcp-session-stats-interval 100ms]\n");
fprintf(out, " [-telemetry-peer peer-id] [-telemetry-interval 500ms]\n");
fprintf(out, " [-relay-remote addr] [-relay-listen addr] [-relay-peer addr]\n");
}
@@ -17,10 +18,13 @@ int main(int argc, char **argv) {
const char *packet_log_path = "";
const char *stats_log_path = "";
const char *stats_interval_raw = "";
const char *telemetry_peer_id = "";
const char *telemetry_interval_raw = "";
const char *relay_listen_alias = "";
const char *relay_remote_addr = "";
const char *relay_peer_alias = "";
int stats_interval_ms = KCP_DEFAULT_STATS_INTERVAL_MS;
int telemetry_interval_ms = 500;
int i;
int rc = 1;
@@ -84,6 +88,20 @@ int main(int argc, char **argv) {
stats_interval_raw = value;
continue;
}
if ((handled = cli_parse_value_flag(argc, argv, &i, argv[i], "-telemetry-peer", &value)) < 0) {
fprintf(stderr, "kcpserver: flag -telemetry-peer requires a value\n");
return 1;
} else if (handled) {
telemetry_peer_id = value;
continue;
}
if ((handled = cli_parse_value_flag(argc, argv, &i, argv[i], "-telemetry-interval", &value)) < 0) {
fprintf(stderr, "kcpserver: flag -telemetry-interval requires a value\n");
return 1;
} else if (handled) {
telemetry_interval_raw = value;
continue;
}
if ((handled = cli_parse_value_flag(argc, argv, &i, argv[i], "-relay-listen", &value)) < 0) {
fprintf(stderr, "kcpserver: flag -relay-listen requires a value\n");
return 1;
@@ -118,6 +136,10 @@ int main(int argc, char **argv) {
fprintf(stderr, "kcpserver: invalid -kcp-session-stats-interval value %s\n", stats_interval_raw);
return 1;
}
if (omni_parse_duration_ms(telemetry_interval_raw, 500, &telemetry_interval_ms) != 0) {
fprintf(stderr, "kcpserver: invalid -telemetry-interval value %s\n", telemetry_interval_raw);
return 1;
}
if (relay_peer_alias[0] != '\0' && relay_remote_addr[0] != '\0' && strcmp(relay_peer_alias, relay_remote_addr) != 0) {
fprintf(stderr, "kcpserver: flags -relay-remote and -relay-peer must match when both are set\n");
@@ -178,6 +200,10 @@ int main(int argc, char **argv) {
fprintf(stderr, "kcpserver: create hub failed\n");
goto cleanup;
}
if (telemetry_peer_id[0] != '\0' && kcp_hub_set_telemetry(hub, telemetry_peer_id, telemetry_interval_ms) != 0) {
fprintf(stderr, "kcpserver: configure telemetry peer %s failed\n", telemetry_peer_id);
goto cleanup;
}
fprintf(stderr, "kcp hub listening on %s\n", listen_addr);
if (kcp_hub_serve_listener(hub, listener) != 0) {
fprintf(stderr, "kcpserver: serve listener failed\n");
@@ -188,6 +214,10 @@ int main(int argc, char **argv) {
}
if (strcmp(mode, "relay") == 0) {
if (telemetry_peer_id[0] != '\0') {
fprintf(stderr, "kcpserver: flag -telemetry-peer may only be used in hub mode\n");
return 1;
}
if (bind_device[0] != '\0') {
fprintf(stderr, "kcpserver: flag -bind-device is not supported in relay mode\n");
return 1;