Как слушать события второго socket io соединения внутри компонента vue-js?

Приветствую. Использую vue-3 и библиотеку vue-socket io

У меня открыто одно "основное" соединение, выглядит это так:
app.use(new VueSocketIO({
        debug: true,
        connection: ''
    })
);

Но существует компонент, который должен подключаться к другому серверу тоже через socket io, как это реализовать?
Я смог открыть второе соединение следующим способом внутри компонента:
import VueSocketIO from 'vue-3-socket.io'

        this.sessionSocket = new VueSocketIO({
            debug: true,
            connection: '', 
            // connection: this.session.host,
            options: { path: "/bot/socket.io/" } //Optional options
        })

Это работает, на стороне сервера срабатывает событие "connection", но я не могу никак разобраться, как мне прослушивать события такого соединения в компоненте.
Объект "sockets" в компоненте по-прежнему слушает события от первого соединения.
Пробовал из документации
socket.subscribe, но вижу ошибку
TypeError: this.sessionSocket.subscribe is not a function

UPD: Научился испускать события, путем перебора полей объекта дошел до
this.sessionSocket.io.emit('test')
Уже обрадовался, ведь есть и .io.on, но он, увы, не реагирует на события
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@Zak0 Автор вопроса
Привет, Матвей! Очередной раз отвечаю на свой же вопрос сам. Такая жизнь, такая жизнь.

Ладно, в общем суть тут следующая: В компоненте можно выкинуть вообще vue-socket.io, как и vue3-socket.io.
Соединение можно открыть локально при помощи "чистой" либы. Иногда сверкает ее упоминание в документации vue-socket.io, но почему-то она не устанавливается самостоятельно с vue-socket.io.
Поэтому проверните на всякий:
npm install socket.io-client
Теперь отдельно импортируем уже в КОМПОНЕНТЕ
import SocketIO from 'socket.io-client'
Ну и теперь для соединения танцуем так:
this.sessionSocket = SocketIO('',{
          path: '/bot/socket.io/'
        })

Я использую пустой адрес и изменяю patch, т.к. проксирую это все дело через vite с целью избежать проблемы с CORS при тестировании.

Ну и как это дело использовать:
Отправить сообщение:
this.sessionSocket.io.emit('test')
А подписаться на событие:
this.sessionSocket.on('test',()=>{
          console.log('Hello World)
        })

Полная документация по этим танцам: https://socket.io/docs/v4/client-api/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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