gpt4 book ai didi

javascript - 如何捕获失败的 WebSocket 消息?

转载 作者:行者123 更新时间:2023-12-02 21:34:45 25 4
gpt4 key购买 nike

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

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

有一个 error 事件,但我看不到如何将其与我尝试发送的消息关联起来。

我正在尝试做这样的事情:

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 确认它们,并在确认时从服务器缓冲区中刷新它们。这为您提供了一个非常可靠的滑动窗口,与您所知道的已交付内容相匹配。

first Google hit for "WebSockets reliable"有这样说:

But, WebSocket is unreliable, you don’t know anything if the clients missed some messages because the connection was broken in a while. How about if the messages are critical for your clients.

The 8 Fallacies of Distributed Computing #1:“网络可靠”。

关于javascript - 如何捕获失败的 WebSocket 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60531816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com