在从数组中删除套接字之前或之后销毁套接字

时间:2017-04-04 03:41:23

标签: node.js sockets

在我的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()
}
  1. destroySocketBefore的情况下,如果我在搜索之前将其销毁,我不确定是否会在数组中找到套接字,因此阵列仍有可能包含无效的套接字后来的逻辑。

  2. destroySocketAfter的情况下,我不确定在从数组中删除的套接字上调用destroy是否会产生所需的结果。在拼接数组后,系统是否有可能删除套接字对象,因此有时我会在destroy对象上调用null

  3. 我进行了测试,似乎两种方法都有效,因为它们之间没有区别,所以我不确定哪种方法是正确的。

2 个答案:

答案 0 :(得分:0)

splice只会从用户定义的数组中删除套接字,并且对它关闭没有任何影响,因此根据你的答案,第二种方法是最佳选择。

答案 1 :(得分:0)

两种解决方案都有效,两者实际上是相同的。无论什么,因为没有竞争条件或类似的东西(由于节点中的javascript执行都发生在同一个线程上),被破坏的套接字将被删除。