Вебсокет-сервер

ім'я

Новичок
Здравствуйте, есть задача реализовать чат и уведомления о новых заявках в режиме реального времени. Планируемая нагрузка примерно 10000 пользователей онлайн, т.е одновременных соединений. Пока сделал на workerman, но не знаю как себя проявит на реальном проекте с такой нагрузкой. Поделитесь пожалуйста опытом использования библиотек для работы с вебсокетами на реальных проектах, насколько правильно использовать для таких целей библиотеки написанные на php? Какие библиотеки можете посоветовать?

Спасибо
 

AmdY

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

fixxxer

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

Какие библиотеки можете посоветовать?
Я делал на http://socketo.me/ - все отлично, порядка 3к одновременных соединений держит с огромным запасом. (Тут главное установить расширение типа pecl/event, через socket_select все, конечно, ляжет очень быстро). Ну и надо следить, чтобы циклических ссылок в коде не было (либо дергать GC по reactphp-таймеру), иначе процесс распухнет быстро.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
возьми воткни https://pushpin.org/docs/about/, и не страдай - пиши обычное php-приложение, а веб-сокеты возьми готовые
разработка и эксплуатация в разы проще
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Я делал на http://socketo.me/ - все отлично, порядка 3к одновременных соединений держит с огромным запасом. (Тут главное установить расширение типа pecl/event, через socket_select все, конечно, ляжет очень быстро). Ну и надо следить, чтобы циклических ссылок в коде не было (либо дергать GC по reactphp-таймеру), иначе процесс распухнет быстро.
Сделали мы с @флоппик - в смысле, он сделал, я смотрел, сервис статистики просмотров блоков на страницах, скорость 575 req/sec в одном процессе
https://www.notion.so/ab-45854b444a97407b805ebb9ec495e7ca
php, конечно, с events
https://hub.docker.com/r/grigori/phpextensions/tags/

тут не то что 3 тысячи, а упремся в порты и сеть раньше, чем в проц
 

Yoskaldyr

"Спамер"
Партнер клуба
@grigori, A pushpin в проде уже тестировал, насколько стабильный и если ли подводные камни?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Сделали мы с @флоппик - в смысле, он сделал, я смотрел, сервис статистики просмотров блоков на страницах, скорость 575 req/sec в одном процессе
Ну вообще, нужно было бы не просто побенчить в докер-контейнере на дев-тачке, а хотя бы сравнить с php-fpm аналогом на такой же железке. Ну если руки дойдут, может повторю логику.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ну вообще, нужно было бы не просто побенчить в докер-контейнере на дев-тачке, а хотя бы сравнить с php-fpm аналогом на такой же железке. Ну если руки дойдут, может повторю логику.
не повторишь - нужен state между вызовами, и это полностью определит скорость,
если делать update в базу на каждый вызов - это будет сравнение записи в базу с оперативкой
 

флоппик

promotor fidei
Команда форума
Партнер клуба
не повторишь - нужен state между вызовами, и это полностью определит скорость,
если делать update в базу на каждый вызов - это будет сравнение записи в базу с оперативкой
ну можно приближено с мемкешем каким потестировать. Будет достаточно «честно» для сравнения решения конкретно этой задачи.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, APCu - пойдет, я даже забыл о нем

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