using Microsoft.Extensions.Diagnostics.HealthChecks;
|
using System.Net.NetworkInformation;
|
using System.Net.WebSockets;
|
|
public class WebSocketHealthCheck : IHealthCheck
|
{
|
private readonly IWebSocketClientService _webSocketClient;
|
private ClientWebSocket _webSocket = new();
|
public bool IsConnected => _webSocket?.State == WebSocketState.Open;
|
public WebSocketHealthCheck(IWebSocketClientService webSocketClient)
|
{
|
_webSocketClient = webSocketClient;
|
}
|
|
public async Task<HealthCheckResult> CheckHealthAsync(
|
HealthCheckContext context,
|
CancellationToken cancellationToken = default)
|
{
|
if (IsConnected)
|
return HealthCheckResult.Unhealthy("WebSocket disconnected");
|
|
try
|
{
|
// 发送测试PING
|
await _webSocketClient.SendAsync("Ping");
|
return HealthCheckResult.Healthy("WebSocket connected and responsive");
|
}
|
catch (Exception ex)
|
{
|
return HealthCheckResult.Unhealthy("WebSocket unresponsive", ex);
|
}
|
}
|
}
|