using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; public class WebSocketBackgroundService : BackgroundService { private readonly IWebSocketClientService _webSocketClient; private readonly ILogger _logger; public WebSocketBackgroundService( IWebSocketClientService webSocketClient, ILogger logger) { _webSocketClient = webSocketClient; _logger = logger; // 订阅消息事件 _webSocketClient.MessageReceived += OnMessageReceived; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { try { if (!IsConnected()) { await _webSocketClient.ConnectAsync(); } // 可以在这里添加定期发送的消息或心跳 await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); } catch (Exception ex) { _logger.LogError(ex, "Error in WebSocket background service"); await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken); // 等待后重试 } } } private bool IsConnected() { // 根据实际实现返回连接状态 return false; // 简化示例,实际应该检查真实状态 } private void OnMessageReceived(object sender, string message) { _webSocketClient.SendAsync(message); _logger.LogInformation("处理 WebSocket 消息: {Message}", message); // 处理接收到的消息 } public override async Task StopAsync(CancellationToken cancellationToken) { _webSocketClient.MessageReceived -= OnMessageReceived; await _webSocketClient.DisconnectAsync(); await base.StopAsync(cancellationToken); } }