Я ищу совет относительно наилучшего способа решения проблемы, с которой я столкнулся, при отправке сообщений через сокет. Мне нужно следить за тем, чтобы заказ был отправлен, то есть сначала в первый раз, даже если я не могу гарантировать, что сокет всегда открыт.Как обеспечить порядок исходящих сообщений
У меня есть менеджер сети в моей программе с методом отправки. Этот метод отправки принимает объект сообщения, а затем пытается вытолкнуть его через сокет.
Однако иногда сокет будет закрыт из-за потери сетевого подключения, и мне нужно прекратить отправлять сообщения и размещать в очереди новые сообщения, пока я жду, пока сокет снова откроется. Когда сокет снова открывается, сообщения в очереди должны быть отправлены по порядку.
Я работаю с Javascript и Websockets. У меня есть что-то вроде этого прямо сейчас, но мне кажется ошибочным:
function send(msg) {
if (msg) {
outbox.push(msg);
}
if (!readyState) {
return setTimeout(send, 100);
}
while (outbox.length) {
socket.send(outbox.shift());
}
}
Кто-нибудь когда-либо решать проблему, как это раньше? Я ищу общий подход к структурированию программы или, возможно, алгоритм, который можно использовать.
Ваш заказ должен быть правильным. Не используйте 'setTimeout'. Вместо этого свяжите что-то вроде 'retryAll()' с обратным вызовом 'onopen' websocket, а затем внутри функции' retryAll() 'do' while (oubox.length) {socket.send ... ' – vin
@vin это отличный ответ. Добавьте его в список ответов! – Adam