如何手动模拟 websocket 断开连接?(Firefox 或 Chrome 开发工具)

How do I simulate a websocket disconnect manually? (Firefox or Chrome dev tools)

提问人:dessalines 提问时间:5/17/2018 更新时间:7/19/2021 访问量:6305

问:

如何手动模拟 websocket 断开连接?我正在尝试测试 websocket 重新连接逻辑,除了等待浏览器的 10 分钟 websocket 超时外,我没有办法这样做。

WebSocket google-chrome-devtools firebug firefox-developer-tools

评论


答:

1赞 Markus Pscheidt 9/21/2018 #1

使用 SockJS 和 Stomp:

socket = new SockJS(socketUrl);
stompClient = Stomp.over(socket); // global variable stompClient

使用以下命令关闭底层套接字:

socket.close();

触发了 stompClient 的错误处理程序,就好像连接已中断一样。

0赞 berhir 7/19/2021 #2

我在这里找到了一个解决方案来测试这一点:https://stackoverflow.com/a/59916046/2929675

在打开 WebSocket 连接之前,您必须执行以下脚本来修补浏览器的 WebSocket 函数:

const sockets = [];
const nativeWebSocket = window.WebSocket;
window.WebSocket = function(...args){
  const socket = new nativeWebSocket(...args);
  sockets.push(socket);
  return socket;
};

现在,您可以通过 sockets 数组访问所有 WebSocket 连接。 当您想触发重新连接时,您可以调用

sockets[0].close();

使用要关闭的连接的索引。

这有点骇人听闻,但这是我迄今为止找到的最好的解决方案。

看起来在开发工具中支持这一点的 chromium 问题也取得了一些进展: https://bugs.chromium.org/p/chromium/issues/detail?id=423246