Давным-давно я публиковал статью на хабре, как написать
свой вебсокет-сервер с нуля. Статья переросла в
библиотеку. Несколько месяцев я занимался её развитием, ещё несколько лет — поддержкой и багфиксом. Написал модуль интеграции с yii2. Какой-то энтузиаст написал интеграцию с laravel. Моя библиотека совместима с php7. Недавно я решил отказаться от её дальнейшей поддержки (причины ниже), поэтому хочу помочь её пользователям перейти на другую библиотеку.
Прежде чем начать писать свой вебсокет-сервер, я выбирал из готовых продуктов, и на тот момент их было всего два: phpdaemon и ratchet.
phpdaemon
1400 звёзд на гитхабе
- зависит от установки библиотеки libevent
- протоколы: HTTP, FastCGI, FlashPolicy, Ident, Socks4/5.
Ratchet
3600 звёзд на гитхабе
- тянет за собой около десятка зависимостей
- протоколы: websocket, http, wamp
- поддержка windows
- нет ssl
Эти библиотеки были очень монструозны и при этом не соответствовали моим внутренним требованиям:
- отсутствие зависимостей
- наличие таймеров
Таймеры мне нужны были для
написания игры на вебсокетах для расчёта взаимодействий между всеми пользователями каждые 0.05 секунды.
В итоге я написал библиотеку для себя и поделился ею с сообществом на
гитхабе. Сделал несколько демок (в том числе игру «танчики»). Переписал стороннюю игру (с разрешения авторов) с node.js на свою библиотеку. Делал нагрузочное тестирование. Демки работали годами без перезагрузки. Старался отвечать на тикеты в течения дня. Всё это показывало, что моя библиотека может быть использована на продакшене и многие её использовали.
Была единственная проблема. Мне хватало моей библиотеки для использования в своих проектах, а вот другим нет. Они хотели, чтобы я её развивал, а мне это было не нужно. Кому-то требовалась поддержка windows, а кому-то ssl, pg_notify, safari, pthreads и многое другое. Открытые тикеты с запросами на реализацию различного функционала висят годами.
Не так давно, я решил пересмотреть ещё раз, какие продукты могут быть полезны для пользователей моей библиотеки и был приятно удивлён, что кроме двух проектов, описанных выше появился ещё третий.
Он полностью удовлетворял моим запросам и даже больше.
Workerman
4500 звёзд на гитхабе
- отсутствие зависимостей
- протоколы: websocket, http/https, tcp, сustom
- поддержка таймеров
- интеграция с react-компонентами
- поддержка windows
Первый его релиз был ещё два года назад, но почему-то всё новые и новые люди начинали пользоваться моей библиотекой для новых проектов. Я ещё могу понять, что ею пользуются на старых проектах (работает — не трогай), но на новых… — для меня это была загадка.
Если загуглить «php websocket», то первая страница — это моя статья на хабре, а вторая — «Ratchet», который кому-то может показаться сложным и он выберет из-за этого мою библиотеку или вообще откажется от идеи делать вебсокеты.
Что ж, пришло время исправить эту досадную ошибку и донести до как можно большего количества людей о существовании такой библиотеки как Workerman и привести несколько примеров по её использованию.
На главной странице проекта в гитхабе уже есть
несколько примеров.
Рассмотрим один из них:
https://habrahabr.ru/post/331462/