我正在努力将基于 REST 的数据管道替换为基于 Websocket 的数据管道,但我无法找到所有可能出错的地方。该系统是生产系统,因此如果出现故障并且无法恢复,将会发生非常糟糕的情况。这是我到目前为止所得到的:
客户端
-
let server = new Websocket(path, opts)
- 将其包裹在
try-catch
会发现程序员错误,例如不正确的 URL,但操作错误(例如服务器未正确响应)似乎无法捕获,因为它们是异步的并且没有回调
-
server.send(data, cb)
- 将其包裹在
try-catch
将捕获类型错误,通常是程序员错误
- 在这里添加回调(
function (err) { handleErr(err); }
) 是一个很好的包罗万象的操作错误,因为回调将有一个非空err
如果由于任何原因发送失败,则会进行处理
-
server.on('error', cb)
- 在这里添加回调似乎是一个好主意,因为
error
活动是其中的一部分EventEmitter
规范,但我实际上还没有发现任何东西
- Heartbeat Checks (verbose, but described here https://github.com/websockets/ws#how-to-detect-and-close-broken-connections)
服务器端
-
server.on('connection', function(connection) {...})
- Trying
connection.send('test', function(err) { handleErr(err); });
是在尝试使用它之前确保连接不会以某种方式失败的好方法,但这可能不是必需的。另外,应该将其包裹在try-catch
由于上述原因
-
server.on('error', cb)
- 看起来是个好主意,原因与我在上面在客户端执行的原因相同
看起来就像是建立在ws
考虑到生产是很困难的,因为没有地方记录所有可能出错的不同事情,并且使用像 Socket.io 这样对用户更友好的库会消除使用所寻求的许多性能优势ws
。是否有关于使用时可能出错的所有不同事情的文档ws
,或者至少是一个强化战斗的指南?我觉得部署这个东西只是一场赌博,任何时候我都可能被愤怒地叫到办公室去解决问题。
你应该捕获所有的错误error
event.
let server = new Websocket(path, opts)
server.on('error', (error) => {
//handle error
})
确保在创建连接之后以及对其运行任何操作之前立即调用此方法。否则回调将不会捕获任何错误并且将抛出异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)