在我的node.js
应用程序中,我有一组客户端套接字作为数组。发生通信错误时,我只需在套接字上调用destroy
。
我的问题是:我应该在从数组中删除套接字之前或之后销毁套接字吗?文档并没有多说。
var clientSockets = []
var destroySocketBefore = function(socket) {
socket.destroy()
var socketIdx = clientSockets.indexOf(socket)
if (socketIdx > -1) {
clientSockets.splice(socketIdx, 1)
}
}
var destroySocketAfter = function(socket) {
var socketIdx = clientSockets.indexOf(socket)
if (socketIdx > -1) {
clientSockets.splice(socketIdx, 1)
}
socket.destroy()
}
在destroySocketBefore
的情况下,如果我在搜索之前将其销毁,我不确定是否会在数组中找到套接字,因此阵列仍有可能包含无效的套接字后来的逻辑。
在destroySocketAfter
的情况下,我不确定在从数组中删除的套接字上调用destroy
是否会产生所需的结果。在拼接数组后,系统是否有可能删除套接字对象,因此有时我会在destroy
对象上调用null
。
我进行了测试,似乎两种方法都有效,因为它们之间没有区别,所以我不确定哪种方法是正确的。
答案 0 :(得分:0)
splice只会从用户定义的数组中删除套接字,并且对它关闭没有任何影响,因此根据你的答案,第二种方法是最佳选择。
答案 1 :(得分:0)
两种解决方案都有效,两者实际上是相同的。无论什么,因为没有竞争条件或类似的东西(由于节点中的javascript执行都发生在同一个线程上),被破坏的套接字将被删除。