import { PacificaWebSocketClient } from './src/exchanges/pacifica/PacificaWebSocketClient.js' import { PacificaWebSocketAdapter } from './src/exchanges/pacifica/PacificaWebSocketAdapter.js' import { PacificaProxyClient } from './src/exchanges/pacifica/PacificaProxyClient.js' import { logger } from './src/utils/logger.js' /** * WebSocket性能测试脚本 * 测试HTTP vs WebSocket的性能差异 */ async function testWebSocketPerformance() { console.log('🚀 开始WebSocket性能测试...\n') const client = new PacificaProxyClient() let httpTimes: number[] = [] let wsTimes: number[] = [] try { console.log('📊 测试1:获取交易对信息性能对比') console.log('='.repeat(50)) // 测试HTTP请求性能 console.log('HTTP请求测试:') client.setWebSocketEnabled(false) for (let i = 0; i < 5; i++) { const startTime = Date.now() try { await client.getSymbols() const duration = Date.now() - startTime httpTimes.push(duration) console.log(` HTTP请求 ${i + 1}: ${duration}ms`) } catch (error: any) { console.log(` HTTP请求 ${i + 1}: 失败 - ${error.message}`) } } await new Promise(resolve => setTimeout(resolve, 2000)) // 等待2秒 // 测试WebSocket请求性能 console.log('\nWebSocket请求测试:') client.setWebSocketEnabled(true) // 先初始化WebSocket连接 try { await client.initializeWebSocket() console.log('✅ WebSocket连接初始化成功') } catch (error: any) { console.log('❌ WebSocket连接初始化失败:', error.message) console.log('⚠️ 继续测试以展示回退机制...') } for (let i = 0; i < 5; i++) { const startTime = Date.now() try { await client.getSymbols() const duration = Date.now() - startTime wsTimes.push(duration) console.log(` WebSocket请求 ${i + 1}: ${duration}ms`) } catch (error: any) { console.log(` WebSocket请求 ${i + 1}: 失败 - ${error.message}`) } } // 性能统计 console.log('\n📈 性能统计:') console.log('='.repeat(50)) if (httpTimes.length > 0) { const avgHttp = httpTimes.reduce((a, b) => a + b, 0) / httpTimes.length const minHttp = Math.min(...httpTimes) const maxHttp = Math.max(...httpTimes) console.log(`HTTP - 平均: ${avgHttp.toFixed(1)}ms, 最小: ${minHttp}ms, 最大: ${maxHttp}ms`) } if (wsTimes.length > 0) { const avgWs = wsTimes.reduce((a, b) => a + b, 0) / wsTimes.length const minWs = Math.min(...wsTimes) const maxWs = Math.max(...wsTimes) console.log(`WebSocket - 平均: ${avgWs.toFixed(1)}ms, 最小: ${minWs}ms, 最大: ${maxWs}ms`) if (httpTimes.length > 0) { const avgHttp = httpTimes.reduce((a, b) => a + b, 0) / httpTimes.length const improvement = (((avgHttp - avgWs) / avgHttp) * 100).toFixed(1) console.log(`\n🚀 WebSocket相比HTTP性能提升: ${improvement}%`) } } console.log('\n🔗 连接状态测试:') console.log('='.repeat(50)) console.log(`WebSocket连接状态: ${client.isWebSocketConnected() ? '已连接' : '未连接'}`) console.log(`WebSocket队列长度: ${client.getWebSocketQueueLength()}`) // 测试价格获取 console.log('\n💰 价格获取测试:') console.log('='.repeat(50)) try { const startTime = Date.now() const prices = await client.getPrices() const duration = Date.now() - startTime console.log(`✅ 价格获取成功: ${duration}ms`) console.log(` 数据长度: ${JSON.stringify(prices).length} 字符`) } catch (error: any) { console.log(`❌ 价格获取失败: ${error.message}`) } // 测试订单簿获取 console.log('\n📚 订单簿获取测试:') console.log('='.repeat(50)) try { const startTime = Date.now() const orderbook = await client.getOrderBook('BTC-USD') const duration = Date.now() - startTime console.log(`✅ 订单簿获取成功: ${duration}ms`) console.log(` 数据长度: ${JSON.stringify(orderbook).length} 字符`) } catch (error: any) { console.log(`❌ 订单簿获取失败: ${error.message}`) } } catch (error: any) { console.error('❌ 测试过程中发生错误:', error.message) } finally { // 清理资源 try { await client.close() console.log('\n🧹 资源清理完成') } catch (error: any) { console.log('⚠️ 资源清理时发生错误:', error.message) } } console.log('\n✅ WebSocket性能测试完成!') } // 运行测试 if (import.meta.url === `file://${process.argv[1]}`) { testWebSocketPerformance().catch(error => { console.error('🚨 测试失败:', error) process.exit(1) }) } export { testWebSocketPerformance }