在Node.js ws包上进行适当的错误处理

The*_*ist 5 communication production-environment websocket node.js

我正在努力用基于Websocket的数据管道替换基于REST的数据管道,而且我很难找到所有可能出错的地方.系统是生产系统,因此如果失败并且无法恢复,则会发生非常糟糕的事情.这是我到目前为止所得到的:

客户端

  • let server = new Websocket(path, opts)
    • 包装它try-catch会发现程序员错误,例如错误的URL,但是服务器没有正确响应等操作错误似乎无法捕获,因为它们是异步的并且没有回调
  • server.send(data, cb)
    • 包装try-catch它将捕获类型错误,通常是程序员错误
    • 在这里添加回调(function (err) { handleErr(err); })是一个很好的操作错误,因为err如果发送由于任何原因失败,回调将具有非null ,因此处理
  • server.on('error', cb)
    • 在这里添加一个回调似乎是一个好主意,因为error事件是EventEmitter规范的一部分,但我还没有抓住它的任何东西
  • 心跳检查(详细,但在此处描述)
    • ws自述文件建议将其作为捕获静默连接故障的方法

服务器端

  • server.on('connection', function(connection) {...})
    • 尝试connection.send('test', function(err) { handleErr(err); });使用它之前确保连接没有以某种方式进行设置失败是一种很好的方法,但可能没有必要.此外,try-catch由于上述原因,应将其包装在一起
  • server.on('error', cb)
    • 似乎是一个好主意,原因与我在客户端上面做的相同

它似乎ws很难建立在生产的基础之上是困难的,因为它记录了所有可能出错的不同事物,并且使用像Socket.io这样更加用户友好的库将消除许多性能优势.使用ws.是否有关于使用时可能出错的所有不同事物的文档ws,或者至少是对其进行加固的指南?我觉得部署这个东西只是一场赌博,任何一秒钟我都会愤怒地被召入办公室解决问题.

Ish*_*ngi 6

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

let server = new Websocket(path, opts)
server.on('error', (error) => {
  //handle error
})
Run Code Online (Sandbox Code Playgroud)

确保在创建连接之后以及对其运行任何操作之前立即调用此方法。否则回调将不会捕获任何错误并且将抛出异常。