对Node.js ws程序包的正确错误处理

问题描述 投票:6回答:1

我正在努力将基于REST的数据管道替换为基于Websocket的数据管道,而在查找所有可能出错的地方时遇到了麻烦。该系统是生产环境,因此如果发生故障并且无法恢复,则会发生非常糟糕的事情。这是到目前为止我得到的:

客户端

  • let server = new Websocket(path, opts)
    • 将其包装在try-catch中将发现程序员错误,例如不正确的URL,但由于服务器是异步的,并且没有回调,因此诸如服务器未正确响应之类的操作错误似乎无法捕获]
  • server.send(data, cb)
    • 将其包装在try-catch中将捕获类型错误,通常是程序员错误
    • 在此处添加回调(function (err) { handleErr(err); })可以很好地解决操作错误,因为如果由于任何原因发送失败,回调将具有非null err,因此可以处理
  • server.on('error', cb)
    • 在这里添加回调似乎是一个好主意,因为error事件是EventEmitter规范的一部分,但我实际上还没有抓住任何东西
  • 心跳检查(详细,但已描述here
    • ws自述文件建议将此作为捕获静默连接失败的方法
  • 服务器端
    • server.on('connection', function(connection) {...})
      • 尝试connection.send('test', function(err) { handleErr(err); });是在尝试使用连接之前确保连接不会因设置而失败的一种好方法,但可能没有必要。另外,出于上述原因,应将其包装在try-catch

  • server.on('error', cb)
    • 出于与上述客户端相同的原因,这似乎是一个好主意
  • 似乎很难在生产环境上构建ws,因为没有地方记录所有可能出错的不同事情,而使用更加用户友好的库(如Socket.io)将删除通过使用ws寻求许多性能优势。是否有关于使用ws时可能出错的所有不同问题的文档,或者至少是对其进行强化处理的指南?我觉得部署这东西只是一场赌博,我可以生气地叫我去办公室修理东西。

    我正在努力将基于REST的数据管道替换为基于Websocket的数据管道,而在查找所有可能出错的地方时遇到了麻烦。系统是生产系统,因此如果发生......>

    node.js websocket communication production-environment
    1个回答
    0
    投票

    您应该捕获error事件中的所有错误。

    let server = new Websocket(path, opts)
    server.on('error', (error) => {
      //handle error
    })
    
    © www.soinside.com 2019 - 2024. All rights reserved.