Мтеки:

socket.io

stop ___

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

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

А поскольку половину моего времени занимает работа над NDA-проектом, а другую — разработка собственного сервиса, я буду делиться своими собственными открытыми наработками.

На данный момент я использовал:

  • React-Redux (Frontend)
  • PHP с самописным модулем кэширования (на бэкенде)
  • Node (сервер для сокетов)
  • БД (MySQL) — в будущем переключусь на PostreSQL если будет проседать.
  • Go Lang — Скрипты для парсинга данных с внешних источников.

Сейчас мессенджер умеет диалоги юзер-юзер, юзер-группа.

Важно понимать что это технический дизайн, настоящий дизайн еще не подъехал.

Так-же готова регистрация и авторизация. 

Т.к мой сервис предполагает обязательное взаимодействие с телефонными номерами пользователей, я решил определить телефонный номер в качестве авторизационной информации при регистрации. Пользователю высылается СМС с подтверждением кода, после чего происходит регистрация со сверкой кода. Полтора года не пользовался смс-шлюзом. Оказалось что правила отправки СМС ужесточились. Выручает мое ООО.

Мессенджер в стадии альфы обошелся мне в 1k+  строк когда и два дня выходных. А еще я прикупил бейсболку, что бы прохожие не видели мои красные глаза от лютого оверворка. 🙂

Техническая спецификация.

Общение socket-сервера с базой данных происходит по средствам http запросов в API. Сам сервер сокетов к базе не подключается.

  • При подключении к socket-серверу передается токен, который был сгенерирован для пользователя при успешной авторизации на сервисе.
  • На socket-сервере присходит handshake по токену. А именно — сверяется присланный токен с доступными открытыми сессиями в системе. Если все ок, сеанс на socket-сервере попадает в массив socket-сессий данного юзера. Сеансов у юзера может быть множество — вкладки в браузере, приложение в смартфоне и т.д.
  • Если имеются группы, то клиент подписывается на групповые каналы (комнаты).
  • Всем клиентам, относящимся к авторизованному юзеру отсылается сокет-оповещение, о том что их друг появился в онлайне, или на оборот.

Далее сеанс будет использован для живых данных: «Вася набирает сообщение», «Джон только что посетил ваш профиль», и т.п. Он же будет подниматься с мобильного приложения в фоне.