From a7155e246aff524bd9e76ff68759a0de1a3f5baf Mon Sep 17 00:00:00 2001 From: ZhouYongyou <128128010+zhouyongyou@users.noreply.github.com> Date: Wed, 5 Nov 2025 01:10:49 +0800 Subject: [PATCH] fix(market): prevent program crash on WebSocket failure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem - Program crashes with log.Fatalf when WebSocket connection fails - Triggered by WebSocket hijacking issue (157.240.12.50) - Introduced in commit 3b1db6f (K-line WebSocket migration) ## Solution - Replace 4x log.Fatalf with log.Printf in monitor.go - Lines 177, 183, 189, 215 - Program now logs error and continues running ## Changes 1. Initialize failure: Fatalf → Printf (line 177) 2. Connection failure: Fatalf → Printf (line 183) 3. Subscribe failure: Fatalf → Printf (line 189) 4. K-line subscribe: Fatalf → Printf + dynamic period (line 215) ## Fallback - System automatically uses API when WebSocket cache is empty - GetCurrentKlines() has built-in degradation mechanism - No data loss, slightly slower API calls as fallback ## Impact - ✅ Program stability: Won't crash on network issues - ✅ Error visibility: Clear error messages in logs - ✅ Data integrity: API fallback ensures K-line availability Related: websocket-hijack-fix.md, auto-stop-bug-analysis.md --- market/monitor.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/market/monitor.go b/market/monitor.go index 23e126d9..033e1685 100644 --- a/market/monitor.go +++ b/market/monitor.go @@ -121,19 +121,19 @@ func (m *WSMonitor) Start(coins []string) { // 初始化交易对 err := m.Initialize(coins) if err != nil { - log.Fatalf("❌ 初始化币种: %v", err) + log.Printf("❌ 初始化币种失败: %v", err) return } err = m.combinedClient.Connect() if err != nil { - log.Fatalf("❌ 批量订阅流: %v", err) + log.Printf("❌ 批量订阅流失败: %v", err) return } // 订阅所有交易对 err = m.subscribeAll() if err != nil { - log.Fatalf("❌ 订阅币种交易对: %v", err) + log.Printf("❌ 订阅币种交易对失败: %v", err) return } } @@ -159,7 +159,7 @@ func (m *WSMonitor) subscribeAll() error { for _, st := range subKlineTime { err := m.combinedClient.BatchSubscribeKlines(m.symbols, st) if err != nil { - log.Fatalf("❌ 订阅3m K线: %v", err) + log.Printf("❌ 订阅 %s K线失败: %v", st, err) return err } }