Javascript 如何捕获失败的WebSocket消息?

Javascript 如何捕获失败的WebSocket消息?,javascript,websocket,Javascript,Websocket,我正在编写一个服务器,它希望确保尽可能地回复所有响应。如果套接字断开连接,当它与旧会话ID重新连接时,我希望服务器重新发送本应通过套接字发送的数据包 然而,据我所知,没有办法正确地检测异步错误,也就是说,发生在网络级别的错误。如果我们已经知道WebSocket处于无效状态,则抛出一个错误,但是如果客户端在消息处于队列中时断开连接,我相信(希望)JavaScript已经继续 有一个错误事件,但我看不到将其与我尝试发送的消息关联的方法 我正在尝试这样做: const ws = new WebSock

我正在编写一个服务器,它希望确保尽可能地回复所有响应。如果套接字断开连接,当它与旧会话ID重新连接时,我希望服务器重新发送本应通过套接字发送的数据包

然而,据我所知,没有办法正确地检测异步错误,也就是说,发生在网络级别的错误。如果我们已经知道WebSocket处于无效状态,则抛出一个错误,但是如果客户端在消息处于队列中时断开连接,我相信(希望)JavaScript已经继续

有一个
错误
事件,但我看不到将其与我尝试发送的消息关联的方法

我正在尝试这样做:

const ws = new WebSocket(...);
// ... ensure the WebSocket is open at some point
// and we can assume `ws.readyState === WebSocket.OPEN` at the time of this call
try {
  ws.send(
    message
  );
} catch (e) {
  bufferedMessages.push(message);
}

但是我认为如果客户端在执行
ws.send(message)
时断开连接,则不会调用
bufferedMessages.push(message)

简单,让客户端始终回显它收到的消息

或者让它在重新连接时重新发送收到的最后一条消息,并在服务器上保留滑动窗口缓冲区

或者一个组合。用UUID标记每条消息,让客户端通过UUID确认它们,并在确认时从服务器缓冲区刷新它们。这将为您提供一个非常可靠的滑动窗口,与您所知道的已交付内容相匹配

政府这样说:

但是,WebSocket是不可靠的,如果客户机因为连接中断而错过了一些消息,您就什么都不知道了。如果这些信息对你的客户来说是至关重要的呢


#1:“网络是可靠的”。

在WebSocket之上实现ACK系统似乎有些奇怪,而WebSocket本应是可靠的。。。我确实发现了一个重复的问题。嗯,我想这不是一个重复的问题。它建议使用哪个链接到它?(在前面的评论中链接)我明白了。。。所以WebSocket是可靠的,因为它们在底层使用TCP,但不能保证实际应用程序得到消息,这意味着存在一个窗口,网络层本可以成功,但应用层没有成功。因此,我需要创建应用层ack。我想我认为WebSocket做到了这一点,但我把WebSocket的保证和TCP的保证混为一谈。谢谢