socket.io的disconnect、close和destroy方法有什么区别?

14
我正在使用 开发一个简单的聊天应用程序。
我试图终止连接,例如当用户选择离开命名空间或类似注销的操作时,而不是退出应用程序或触发重新加载。
我已经在 GitHub 上检查了此问题,以及以下问题:
- Node.js:socket.io关闭客户端连接 - 如何在socket.io上服务器端关闭套接字 - 如何关闭socket.io连接 他们建议使用不同的方法,例如disconnectclose等。
根据我的实验结果,
无论是disconnect还是close方法都会将套接字的connected属性设置为false,将disconnected属性设置为true,如下所示。

enter image description here

我还注意到套接字原型中有一个destroy方法:

enter image description here

有人能描述一下这些方法到底是干什么用的,以及它们之间的区别吗?


顺带一提:如果有人能分享这些方法的文档参考资料,那就太好了。


哈哈哈,socket.io 的合理文档?不可能发生。 - Karel Bílek
哈哈,那个过时了。 - Bstorm
1个回答

9

这些是在 VSCODE 中的typescript 定义

    /**
     * Disconnects the socket manually
     * @return This Socket
     */
    close():Socket;

    /**
     * @see close()
     */
    disconnect():Socket;

对于 Socket.IO 的 close 方法,其源代码并不是非常有帮助。

/**
 * Closes the underlying connection.
 *
 * @api private
 */
Client.prototype.close = function(){
  if ('open' == this.conn.readyState) {
    debug('forcing transport close');
    this.conn.close();
    this.onclose('forced server close');
  }
};

关于disconnect

/**
 * Disconnects from all namespaces and closes transport.
 *
 * @api private
 */
Client.prototype.disconnect = function(){
  for (var id in this.sockets) {
    if (this.sockets.hasOwnProperty(id)) {
      this.sockets[id].disconnect();
    }
  }
  this.sockets = {};
  this.close();
};

看起来disconnect在完成其他断开连接的工作后会调用close。我建议在需要关闭时调用disconnect,而不仅仅是调用close


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接