Очередь запросов в websocket?

Делаю приложение и использую вебсокет. В приложении есть авторизация и пока не авторизуешься, на все остальные запросы сервер соответственно отвечает ошибкой.

В чем проблема: После потери связи с сервером все запросы встают в очередь и после восстановления связи выполняются (это механизм вебсокета). Но если связи не было достаточно долго (более 30 сек) то вебсокет создает новое подключение (оно уже не авторизованно получается) и пытается в него отправить запросы из очереди. У меня реализовано что сразу после установления соединения выполнялась авторизация, но бывает что некоторые запросы из очереди улетают раньше авторизации. И на них сервер отвечает ошибкой.

Вопрос: Как то можно управлять этой очередью или запретить вебсокету создавать новые подключения, а все время пытаться восстановить старое? Или может есть ещё какие-то варианты?
  • Вопрос задан
  • 960 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно проверять длину буфера:
// every 100ms examine the socket and send more data
// only if all the existing data was sent out
setInterval(() => {
  if (socket.bufferedAmount == 0) {
    socket.send(moreData());
  }
}, 100);

Вариант — сделать свою обёртку над буфером отправки. Чтобы в буфере самого WS было максимум одно сообщение, а остальные ждали в _вашей_ очереди, над которой вы полный хозяин.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы