test_websocket_with_proxy.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import { PacificaProxyClient } from './src/exchanges/pacifica/PacificaProxyClient.js'
  2. import { logger } from './src/utils/logger.js'
  3. /**
  4. * 测试带代理的WebSocket交易功能
  5. * 集成到主程序的测试
  6. */
  7. async function testWebSocketWithProxy() {
  8. console.log('🚀 开始带代理的WebSocket交易测试...\n')
  9. // 启用WebSocket模式
  10. const client = new PacificaProxyClient({
  11. account: process.env.PACIFICA_ACCOUNT_1,
  12. privateKey: process.env.PACIFICA_PRIVATE_KEY_1,
  13. })
  14. try {
  15. console.log('🔧 配置WebSocket模式...')
  16. client.setWebSocketEnabled(true)
  17. console.log('📡 初始化WebSocket连接...')
  18. await client.initializeWebSocket()
  19. console.log('✅ WebSocket初始化成功!')
  20. console.log(` 连接状态: ${client.isWebSocketConnected()}`)
  21. console.log(` 队列长度: ${client.getWebSocketQueueLength()}`)
  22. // 测试连接和代理状态
  23. console.log('\n🔗 测试连接...')
  24. const connectionTest = await client.testConnection()
  25. console.log('连接测试结果:', {
  26. success: connectionTest.success,
  27. latency: `${connectionTest.latency}ms`,
  28. proxy: connectionTest.proxyUsed ? '启用' : '禁用',
  29. })
  30. // 测试获取交易对(混合模式)
  31. console.log('\n📊 测试获取交易对(WebSocket + HTTP回退)...')
  32. const startTime = Date.now()
  33. try {
  34. const symbols = await client.getSymbols()
  35. const duration = Date.now() - startTime
  36. console.log(`✅ 获取交易对成功: ${duration}ms`)
  37. console.log(` 数据类型: ${typeof symbols}`)
  38. if (symbols && symbols.data) {
  39. console.log(` 交易对数量: ${Array.isArray(symbols.data) ? symbols.data.length : 'N/A'}`)
  40. }
  41. } catch (error: any) {
  42. console.log(`❌ 获取交易对失败: ${error.message}`)
  43. }
  44. // 测试获取价格数据
  45. console.log('\n💰 测试获取价格数据...')
  46. try {
  47. const startTime = Date.now()
  48. const prices = await client.getPrices()
  49. const duration = Date.now() - startTime
  50. console.log(`✅ 获取价格成功: ${duration}ms`)
  51. if (prices && prices.data) {
  52. console.log(` 价格数据长度: ${Array.isArray(prices.data) ? prices.data.length : 'N/A'}`)
  53. }
  54. } catch (error: any) {
  55. console.log(`❌ 获取价格失败: ${error.message}`)
  56. }
  57. // 测试订单簿获取
  58. console.log('\n📚 测试获取订单簿...')
  59. try {
  60. const startTime = Date.now()
  61. const orderbook = await client.getOrderBook('BTC-USD')
  62. const duration = Date.now() - startTime
  63. console.log(`✅ 获取订单簿成功: ${duration}ms`)
  64. if (orderbook && orderbook.bids) {
  65. console.log(` 买单数量: ${orderbook.bids.length}`)
  66. console.log(` 卖单数量: ${orderbook.asks.length}`)
  67. console.log(` 中间价: $${orderbook.midPrice?.toFixed(2) || 'N/A'}`)
  68. }
  69. } catch (error: any) {
  70. console.log(`❌ 获取订单簿失败: ${error.message}`)
  71. }
  72. // 模拟WebSocket交易测试(不执行真实交易)
  73. console.log('\n🎯 模拟WebSocket交易测试...')
  74. console.log('注意:这是模拟测试,不会执行真实交易')
  75. const mockOrderParams = {
  76. symbol: 'BTC',
  77. side: 'buy' as const,
  78. amount: '0.001',
  79. account: process.env.PACIFICA_ACCOUNT_1 || '',
  80. signature: 'mock_signature_for_testing', // 模拟签名
  81. }
  82. console.log(' 模拟市价单参数:')
  83. console.log(` 符号: ${mockOrderParams.symbol}`)
  84. console.log(` 方向: ${mockOrderParams.side}`)
  85. console.log(` 数量: ${mockOrderParams.amount}`)
  86. console.log(` 账户: ${mockOrderParams.account.substring(0, 8)}...`)
  87. console.log(' ✅ 参数验证通过(模拟)')
  88. // 性能统计
  89. console.log('\n📈 性能统计:')
  90. console.log(` WebSocket连接状态: ${client.isWebSocketConnected() ? '✅ 已连接' : '❌ 未连接'}`)
  91. console.log(` 消息队列长度: ${client.getWebSocketQueueLength()}`)
  92. console.log(` 代理状态: ${connectionTest.proxyUsed ? '✅ 已启用' : '❌ 禁用'}`)
  93. } catch (error: any) {
  94. console.error('❌ 测试过程中发生错误:', error.message)
  95. console.error('错误详情:', error)
  96. } finally {
  97. // 清理资源
  98. try {
  99. await client.close()
  100. console.log('\n🧹 资源清理完成')
  101. } catch (error: any) {
  102. console.log('⚠️ 资源清理时发生错误:', error.message)
  103. }
  104. }
  105. console.log('\n✅ 带代理的WebSocket测试完成!')
  106. }
  107. // 代理状态测试
  108. async function testProxyStatus() {
  109. console.log('\n🔍 代理状态检查:')
  110. const proxyConfig = {
  111. enabled: process.env.PROXY_ENABLED === 'true',
  112. host: process.env.PROXY_HOST,
  113. port: process.env.PROXY_PORT,
  114. user: process.env.ASTER_PROXY_USER,
  115. hasSessionPrefix: !!process.env.ASTER_PROXY_SESSION_PREFIX,
  116. hasSessionSuffix: !!process.env.ASTER_PROXY_SESSION_SUFFIX,
  117. }
  118. console.log(' 配置状态:')
  119. console.log(` 代理启用: ${proxyConfig.enabled ? '✅' : '❌'}`)
  120. console.log(` 代理主机: ${proxyConfig.host || '未配置'}`)
  121. console.log(` 代理端口: ${proxyConfig.port || '未配置'}`)
  122. console.log(` 代理用户: ${proxyConfig.user ? proxyConfig.user.substring(0, 4) + '***' : '未配置'}`)
  123. console.log(` 会话前缀: ${proxyConfig.hasSessionPrefix ? '✅' : '❌'}`)
  124. console.log(` 会话后缀: ${proxyConfig.hasSessionSuffix ? '✅' : '❌'}`)
  125. if (proxyConfig.enabled && proxyConfig.host && proxyConfig.user) {
  126. console.log(' ✅ 代理配置完整,支持WebSocket')
  127. } else {
  128. console.log(' ⚠️ 代理配置不完整,WebSocket可能直连')
  129. }
  130. }
  131. // 运行测试
  132. if (import.meta.url === `file://${process.argv[1]}`) {
  133. Promise.resolve()
  134. .then(() => testProxyStatus())
  135. .then(() => testWebSocketWithProxy())
  136. .catch(error => {
  137. console.error('🚨 测试失败:', error)
  138. process.exit(1)
  139. })
  140. }
  141. export { testWebSocketWithProxy }