| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- 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 }
|