WebSocket 已经处于 CLOSING 或 CLOSED 状态 Socket io

Posted

技术标签:

【中文标题】WebSocket 已经处于 CLOSING 或 CLOSED 状态 Socket io【英文标题】:WebSocket is already in CLOSING or CLOSED state Socket io 【发布时间】:2019-04-13 07:49:44 【问题描述】:

Socket io 返回错误为: WebSocket 已经处于 CLOSING 或 CLOSED 状态的 Socket io。

节点 JS:

socket.to(socketId).emit('details',  userdetails: username );

反应 JS:

socket.on('details', data => 
    console.log(data.userdetails);
);

你能帮我解决 WebSocket 处于关闭或关闭状态的问题吗? 任何形式的帮助都是可观的。

【问题讨论】:

任何人都对此有想法。 【参考方案1】:

1) 回滚到 socket.io-client 版本 2.0.3。最新的 2.1.1 版本有问题。

npm install socket.io-client@2.0.3 --save

2) 另外,请确保在 React.js 中自行清理并关闭套接字...

  componentDidMount() 
    this.socket = io('http://www.example.com');
  

  componentWillUnmount() 
    this.socket.close();
  

【讨论】:

【参考方案2】:

默认 pingTimeout 从 60000 (v2.0.4) 更改为 5000 (v2.1.0+),这对于 Chrome 等某些浏览器来说还不够。

在 v2.1.0+(包括最新的 v2.2.0)上解决此问题的方法是覆盖服务器上的默认 pingTimeout。

const io = require('socket.io')(server, 
  pingTimeout: 60000,
);

【讨论】:

以上是关于WebSocket 已经处于 CLOSING 或 CLOSED 状态 Socket io的主要内容,如果未能解决你的问题,请参考以下文章

Meteor WebSocket 已处于 CLOSING 或 CLOSED 状态错误

如何正确取出 NodeJs 中 expressWs 模块的逻辑?

Linux下netstat查看处于TIME_WAIT的socket过多

无法在“WebSocket”上执行“发送”:仍处于 CONNECTING 状态

如何保持 Kotlin Ktor websocket 处于打开状态

WPF中Closing窗体时调用Hide()方法异常