以下代码将创建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});
}
答案 0 :(得分:0)
来自the spec:
如果有任何事件侦听器为open事件注册,则不能对其readyState属性的值设置为CONNECTING(0)的WebSocket对象进行垃圾收集。事件,错误事件或关闭事件。
如果有任何事件侦听器已注册,则必须不对垃圾收集其readyState属性的值设置为OPEN(1)或CLOSING(2)的WebSocket对象。用于消息事件,错误事件或关闭事件。
具有已建立连接且已排队等待传输到网络的数据的WebSocket对象不得进行垃圾回收。 [WSP]
如果WebSocket对象在其连接仍处于打开状态时进行了垃圾回收,则用户代理必须关闭WebSocket连接。 [WSP]