@dfhkjhg

Почему вебсокет отправляет несколько одинаковых сообщений одному пользователю?

Вот роут в котором я вызываю emit

req.app.emit('broadcast', data)

app.js
ws.on('connection', (socket) => {
    console.log('connected')
    
    app.on('broadcast', (data = {}) => {
        ws.clients.forEach(client => client.send(JSON.stringify(data)))
    })
})


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

5f5e8401caac5785435720.png
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Видимо потому, что при каждом подключении любого клиента вы навешиваете новый обработчик на событие broadcast, который рассылает инфу всем подключенным клиентам клиентам.

В результате получается так:
1. Перезапустили серв обнулив тем самым все подключения
2. Зашли на сайт (или обновили страницу) -> произошло подключение -> сработало событие 'connection' -> повесился обработчик на событие 'broadcast'
3. Повторно зашли на сайт (или обновили страницу) -> произошло подключение -> сработало событие 'connection' -> повесился еще один обработчик на событие 'broadcast'
4. угадайте сколько сообщений теперь прийдет клиентам при вызове req.app.emit('broadcast', data)?

решение (прежде чем смотреть попробуйте найти решение самостоятельно)
ws.on('connection', (socket) => {
    console.log('connected')
})

app.on('broadcast', (data = {}) => {
    ws.clients.forEach(client => client.send(JSON.stringify(data)))
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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