Главное Свежее Вакансии   Проекты
Комментируемое:

Список ссылок временно недоступен
69 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Анатомия плагина чата. Как устроен ImbaChat?

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

Из чего сделан чат?


Основа работы плагина чата — это обмен данными между браузером и сервером, при отправке и получении сообщений, через постоянное соединение. Это соединение обеспечивается технологией WebSocket (Протокол WebSocket ). WebSocket особенно хорош для сервисов, которые нуждаются в постоянном обмене данными, например онлайн игры, торговые площадки, работающие в реальном времени, и т.д.

Через эти протоколы все пользователи подключаются к комет серверу CppComet, который работает на основе технологии comet. Он написан на C++ и является многопоточным, поэтому может выдержать большую нагрузку в несколько десятков тысяч соединений.


Место Comet Server и WebSocket в процессе работы чата

CppComet предоставляет API для отправки сообщений из бекенда чата во фронтенд через вебсокеты, то есть описание процесса отправки. Вообще, API — это набор функций, описывающих условия взаимодействия двух программ или двух сайтов.

Бекенд чата написан на PHP и оформлен как плагин к October CMS. Эта платформа предоставляет удобную панель администратора, функции для работы с файлами сайта и много других дополнительных плагинов, которые могут оказаться полезны. Кроме этого, October CMS является достаточно гибкой и быстрой системой, которая основана на Laravel. Это не замедляет работу кода по сравнению с тем, если бы код писался без использования CMS. Также October CMS дает механизм для кеширования на выбор: Redis, Memcached или кеш в файлах.

Фронтенд чата написан на JavaScript с использованием Jquery. Для управления базой данных используется MySQL или MariaDB.

Чат под нагрузкой


Поведение пользователей будет значительно влиять на нагрузку, то как часто они отправляют сообщения и переключаются между диалогами. Если пользователь находится онлайн, но ничего не делает, то он только слегка нагружает сервер. Если совершает активные действия, отправляет сообщения, то его запросы должны обрабатываться сервером и сообщения сохраняются в базу данных. Проводилось нагрузочное тестирование чата. В этих статьях описаны механизм нагрузочного тестирования чата и результаты. Всю эту нагрузку может выдержать один недорогой сервер.

Есть еще один отличный механизм, встроенный в чат — кэширование переписки в интерфейсе Indexed Database API . Это база данных, которую можно использовать внутри любого браузера для хранения большого количества данных. При переключении диалогов пользователь получает результат из локального кэша его браузера мгновенно. И затем, в фоне отправляется запрос с сервера для проверки наличия сообщений, не попавших в кэш. Такой механизм позволяет чату работать даже при отсутствии подключения к интернету. Данные переписки будут просто доставаться из кэша. А если пользователь напишет сообщение, то оно отправится туда и будет передано на сервер в фоновом режиме, при возобновлении работы сети.

В итоге, благодаря кэшированию всех сообщений и диалогов в IndexdDB пользователь почти всегда получает ответ мгновенно еще до обработки его сервером. И, если сервер перегружен, то сообщение может отправляться чуть дольше. Но сам чат все еще будет работать. Если чат работает на Cordova приложении, то в кэш попадают ещё и файлы в сообщениях (изображения, аудио и др.) и приложение работает как стандартный мессенджер.

Существует реальный пример работы чата под большой нагрузкой на 130000 пользователей, у которых много диалогов с 2 Гб файлов в день. И чат справляется с этим отлично.

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Первые Новые Популярные
Комментариев еще не оставлено
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.