@antimodern

Как избавится от дублирования подписок на сокеты? Как использовать socket.io в SPA?

Простое Vue приложение. Два роута: на одном роуте происходит подписка

beforeMount () {
    socket.emit('subscribeToTimer', 1000)
    socket.on('timer', timestamp => {
      this.timestamp = timestamp
      this.countEvents++
    })
  }

Само соединение вынесено в App.vue, чтобы не дублировать в каждом компоненте его заново.

beforeMount () {
    console.log('socket work')
    socket.on('connect', () => {
      console.log('CONNECTION STATUS:', socket.connected)
      console.log('SOCKET:', socket.id)
    })
    socket.on('disconnect', () => {
      console.log('DISCONNECTION STATUS:', socket.disconnected)
    })
    socket.open()
  }


И вот тут начинается проблема - если прийти на этот роут повторно, то подписка происходит еще раз. И так каждый раз. Получается, вебсокет соединение висит открытое и клиент подписывается множество раз на одно и то же событие. В итоге получаю не одно обновление в секунду таймера, а 100500.

Как надо?
  • Вопрос задан
  • 360 просмотров
Пригласить эксперта
Ответы на вопрос 1
@grinat
У тебя подписка должны быть тоже в одном месте, либо же ты должен после того как человек покидает роут отписываться.
Ответ написан
Ваш ответ на вопрос

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

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