Сейчас я создаю мобильное приложение. Пока количество пользователей не известно, но, в потенциале, их может быть сотни тысяч.
Стек, я думаю, не имеет значения, но напишу, вдруг поможет ответить на вопрос:
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? А что если миллион?
Где можно почитать как это реализовано в крупных приложениях? Поиск по гуглу не дает результатов.