Я пишу сервер, который хочет убедиться, что он отвечает на все ответы, если это возможно. Если сокет отключается, когда он повторно соединяется со старым идентификатором сеанса, я хочу, чтобы сервер повторно отправлял пакеты, которые должны были пройти через сокет.
Однако, насколько я могу судить, нет никакого способа правильно обнаруживать асинхронные ошибки, то есть ошибки, возникающие на уровне сети. 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);
}
но я не думаю, что это вызовет bufferedMessages.push(message)
, если клиент отключится во время выполнения ws.send(message)
.