优化Node.js中加密交易机器人的套接字管理

eqoofvh9  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(130)

虽然我基本上已经完成了这个项目,但我需要使用套接字连接来确保数据保持最新,并且可以处理频繁的连接错误。在评估当前的解决方案时,我有一些问题,我列出了这些问题。此外,如果有更好的解决方案或架构建议,我很乐意听取。主Node.js应用程序从Redis中检索数据,所以我考虑只使用GO处理套接字部分,并将数据传输到Redis。JavaScript有时让我觉得复杂的方法很有挑战性。你认为问以下问题并以这种方式评估情况是正确的方法吗?
1.在Node.js应用程序中,最适合套接字连接的循环机制是什么?使用setInterval更有利,还是while循环更有利?在性能和错误处理方面有什么区别?
1.在while循环中使用CCXT Pro的watchOrderBook方法时,每次调用此方法都会向交换机发起新的连接请求,还是在初始连接后自动保持连接并接收更新?
1.对于连接到多个交换机和服务器的套接字连接,体系结构应该如何?我正在存储交换和符号信息与服务器编号。如何根据已知信息向这些服务器发出套接字侦听命令?
1.当发生断开连接时,重新连接套接字是否需要指数退避机制?如果设置固定的重新连接时间,比如每30秒,会有什么问题吗?我很想知道为什么其他人更喜欢指数退避方法。
我目前的工作方法如下,但作为最后的手段,我将改进此示例以建立连接。在本例中,我还担心while循环导致的过度资源消耗。此外,这种方法阻碍了我管理断开的连接的能力,因为有时我需要建立和终止连接。虽然我可以用setInterval实现这一点,但我相信用while似乎不可能。

async function watchSelected(symbol) {
  let data;

  setInterval(async () => {
    console.log(data?.asks[0][0]);
  }, 1000);

  while (true) {
    const result = await exc.watchOrderBook(symbol, 10);
    data = result;
  }
}

watchSelected();
r1zhe5dt

r1zhe5dt1#

在用于套接字连接的Node.js应用程序中:

  • 当简单性和固定间隔足够时,使用setInterval
    ***优点:**设置简单,间隔固定。
    ***考虑因素:**潜在重叠、资源消耗。
setInterval(async () => {
  try {
    const data = await socketOperation();
    // Process data
  } catch (error) {
    console.error('Socket error:', error);
    // Handle error, possibly attempt to reconnect
  }
}, 1000);
  • 使用while循环进行更多控制和动态调度。
    ***优点:**精确控制,动态调度。
    ***考虑因素:**潜在阻塞、资源密集度。
async function watchSocket() {
  let isConnected = false;

  while (true) {
    try {
      if (!isConnected) {
        // Connect logic
        isConnected = true;
      }

      const data = await socketOperation();
      // Process data
    } catch (error) {
      console.error('Socket error:', error);
      isConnected = false; // Handle error and set the flag for reconnection
    }
  }
}

watchSocket();

根据应用的要求和复杂性进行选择。

相关问题