是否有必要保护封闭物内物体的寿命

时间:2014-07-16 19:46:27

标签: javascript node.js socket.io

以下代码将创建2个客户端并连接到服务器。套接字变量的生命期预计会持续到程序结束。虽然代码工作正常,但只是想知道,是否有必要将闭包内的 socket 变量添加到闭包外的数组或某个容器中,以保护套接字的生命周期

var usernames = [];
usernames.push('tom');
usernames.push('bob');

usernames.forEach(function (username) {

    var socket = require('socket.io-client')('http://localhost:3000', {'forceNew': true});

    socket.emit('loaded', {username: username});
}

1 个答案:

答案 0 :(得分:0)

来自the spec

  

如果有任何事件侦听器为open事件注册,则不能对其readyState属性的值设置为CONNECTING(0)的WebSocket对象进行垃圾收集。事件,错误事件或关闭事件。

     

如果有任何事件侦听器已注册,则必须不对垃圾收集其readyState属性的值设置为OPEN(1)或CLOSING(2)的WebSocket对象。用于消息事件,错误事件或关闭事件。

     

具有已建立连接且已排队等待传输到网络的数据的WebSocket对象不得进行垃圾回收。 [WSP]

     

如果WebSocket对象在其连接仍处于打开状态时进行了垃圾回收,则用户代理必须关闭WebSocket连接。 [WSP]