Сколько сокетных соединений должно держать real-time мобильное приложение и как создаются такие приложения?

Сейчас я создаю мобильное приложение. Пока количество пользователей не известно, но, в потенциале, их может быть сотни тысяч.

Стек, я думаю, не имеет значения, но напишу, вдруг поможет ответить на вопрос:

React Native для, собственно, приложения, т.к. кроссплатформенно + имеются хорошие знания в js + Скорость UI не критична, да и ресурсов на нативную разработку нету.

PHP (Laravel) для админки и API, т.к. из коробки все готово + опыт работы с ним больше 4 лет.

Golang для встроенного мессенжера из-за простоты работы с сетью и сокетами из коробки.

Java для решения основного предназначения приложения, т.к. нужна будет многопоточность + хотелось бы стандартное ООП, которого в голанге нету.

Осознал такую вещь, что я не понимаю, как создаются приложения, где очень много real-time событий. Например, взять приложение VK. Там в реальном времени обновляется стена, друзья, приходят сообщения в кучу чатов и тд. Не могу понять, как это все делается? Каждый чат, стена, друзья и тд слушаются отдельным сокетом?

Как я это вижу - Когда пользователь логинится в приложение, нужно открыть соединение по вебсокету с сервером и слушать различные события. Сервер, при наступлении событий, отправляет их клиенту примерно в таком виде

type: 'message',  data: {text: 'привет', chanelId: 1}

type: 'friendRequest',  data: {user: {'name' : 'Вася', id: 1, avatar 'src'}}


Данные события обрабатывать в каком-нибудь Redux`е и обновлять компоненты, которые подписаны на redux store.

Но тут вопрос - как много сможет сервер держать открытых сокетов? Гугл показывает, что около 65к (хотя может я не так гуглю). А что если пользователей 100 000? А что если миллион?

Где можно почитать как это реализовано в крупных приложениях? Поиск по гуглу не дает результатов.
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 3
kellas
@kellas
веб-разработчик
1 веб-сокет соединение. при разрыве - переподключение. + вам наверняка понадобится использовать и обрабатывать push уведомления для части событий.

Для поддержки сотен тысяч клиентов используйте https://github.com/centrifugal/centrifugo https://habr.com/ru/post/326236/

Клиент <-> pub/sub <-> centrifugo <-> pub/sub <-> сервера

К centrifugo подключается при необходимости(чтобы держать нагрузку) несколько серверов , каждый подписывается на свой тип событий
Ответ написан
@Mox
Team Lead, RoR, React/React Native
Вам лучше с мобилы держать одно соединение с Firebase или RabbitMQ ( Paho MQTT, если хотите без native библиотек).

Все остальное делайте на сервере, я использовал Firebase по сути как кэш с realtime обновлениями для лучшего масштабирования.
Ответ написан
@402d
начинал с бейсика на УКНЦ в 1988
Как я это вижу - Когда пользователь логинится в приложение, нужно открыть соединение по вебсокету с сервером и слушать различные события.


Дозе режим у мобильных приложений.
Если операционка посчитала, что приложение не очень нужно пользователю, то доступ к
сети в фоне сперва будет 1 раз в час, потом 2, 4, до 1 раза в сутки.

Так, что открыть соединение и слушать события не получится.

Кроме того, не забываем, что мобильники перемещаются и сеть время от времени не доступна.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Leningrad Media Санкт-Петербург
от 100 000 до 150 000 ₽
Studyworld Санкт-Петербург
от 130 000 ₽
SaveTime Москва
от 160 000 ₽
23 сент. 2020, в 06:18
20000 руб./за проект
23 сент. 2020, в 06:11
2000 руб./за проект
23 сент. 2020, в 00:43
40000 руб./за проект