Угловое одностраничное приложение и несколько розеток socketio

0

Мне еще предстоит найти решение или любую информацию по этой теме. В основном я разрабатываю приложение для чата с фляжкой, сокеткой и угловыми. Я создал одностраничное приложение с angularjs, поэтому, когда я нажимаю, например, кнопку регистрации, эта страница появляется в виду, даже если на самом деле она не маршрутизируется на новую страницу. Проблема в том, что когда я нажимаю кнопку регистрации или переключается на просмотр, создается другое соединение сокета. Поэтому, когда я возвращаюсь к просмотру приложения чата, чтобы отправить сообщение, он отправляет 3 сообщения, потому что были созданы 3 сокета. Сначала изначально, когда я пошел на регистрацию, и было создано третье сокет-соединение, когда я вернулся к просмотру приложения чата. Поэтому у меня есть несколько вопросов об этом поведении:

В не-SPA это поведение все равно произойдет?

Размыкается ли сокет при переключении страниц в не-SPA?

С моей проблемой я вижу, что изменение вида в SPA создает другой сокет, но он не удаляет сокет. Как избежать множественных подключений сокетов, чтобы я не отправлял несколько сообщений/событий для одного события отправленного сообщения?

Большое спасибо, ребята.

Теги:
sockets
single-page-application
socket.io
flask-socketio

2 ответа

1
Лучший ответ

В не-SPA это поведение все равно произойдет? Размыкается ли сокет при переключении страниц в не-SPA?

В не-SPA, когда вы переходите с одной страницы на другую, браузер удаляет все соединения, которые старая страница все еще открыта. Каждая страница работает в совершенно отдельном контексте.

В SPA вы должны переместить код создания сокета в модуль верхнего уровня, что работает только тогда, когда приложение инициализируется, но не при переходе с одной страницы на другую. Таким образом, вы будете использовать один экземпляр socketio через весь срок службы приложения.

  • 0
    Спасибо за объяснение. В итоге я использовал оболочку angular-socket-io, и у нее есть метод, вызываемый вперед, чтобы остановить создание дублирующих событий дескриптора. Но в будущем я приму ваш совет.
0

Лучшими практиками для меня было бы использование Shared Worker в качестве потока для подключения сокетов. Это гарантировало, что для всех вкладок ваших приложений будет только один экземпляр Shared Worker, поэтому у вас обязательно будет только одно соединение сокета.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню