@s2sk1337

Как сделать ожидание коннекта к WebSocket?

Всем привет.

Столкнулся с такой проблемой что иногда отправка сообщений на сокет сервер происходит быстрее чем коннект к сокет серверу, естественно браузер начинает кидать ерроры "Нельзя отправит сообщение пока идет соединение".

такой код:

var
	socket = new WebSocket("ws://localhost:8888");

function SendMessages(text)
{
socket.send(text);
}

//Где-то там в коде SendMessages(text)


Ну и пользователь иногда может отправить сообщение быстрее чем пройдет коннект к серверу. Как можно это поправить и заставить код ждать коннекта?
  • Вопрос задан
  • 771 просмотр
Решения вопроса 1
// Соединение
const socket = new WebSocket('ws://localhost:8888')
// Очередь сообщений
let queue = []

// Отправляет сообщение
function sendMessage(message) {
    // Проверка, установлено ли соединение
    if (socket.readyState !== WebSocket.OPEN) {
        // Ежели нет, добавляем сообщение в очередь
        queue.push(message)
        return
    }
    
    // Отправляет сообщение, если есть соединение
    socket.send(message)
}

// Обработка события открытия соединения
socket.addEventListener('open', () => {
    // При открытии соединение тут же отправляем накопленные сообщения
    queue.forEach(message => {
        sendMessage(message)
    })
    
    // Очищаем очередь
    queue = []
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
Очевидно логику надо выполнять тогда, когда соединение уже установлено. Событие онопен явно подходит https://learn.javascript.ru/websockets
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы