Введение

Workerman, высокопроизводительный PHP контейнер приложений

Что такое Workerman?

Workerman - это открытый высокопроизводительный контейнер приложений на PHP с открытым исходным кодом.

Workerman не является повторением существующих решений, это не MVC фреймворк, а более низкоуровневый и универсальный сервисный фреймворк. С его помощью можно разрабатывать TCP-прокси, прокси для обхода цензуры, игровые серверы, почтовые серверы, FTP-серверы, и даже реализовывать PHP-версии Redis, базы данных, Nginx и PHP-FPM. Workerman можно назвать инновацией в PHP, которая позволяет разработчикам освободиться от ограничений, связанных с возможностями PHP, ориентированными только на веб-разработку.

Фактически Workerman похож на PHP-версию Nginx, построенную на базе многопроцессорной архитектуры, Epoll и неблокирующего ввода-вывода. Каждый процесс Workerman способен обслуживать десятки тысяч одновременных подключений. Поскольку он работает постоянно в памяти и не зависит от Apache, Nginx, PHP-FPM и подобных контейнеров, он обладает очень высокой производительностью. Также поддерживает TCP, UDP, UNIXSOCKET, долгосрочные соединения, а также протоколы обмена данными, такие как Websocket, HTTP, WSS, HTTPS, а также различные пользовательские протоколы. Кроме того, он включает таймеры, асинхронных клиентов для сокетов, асинхронный Redis, асинхронный HTTP, асинхронную очередь сообщений и многие другие компоненты высокой производительности.

Некоторые направления применения Workerman

Workerman отличается от традиционных MVC фреймворков тем, что его можно использовать не только для веб-разработки, но и в более широком спектре областей, таких как мгновенные сообщения, Интернет вещей, игры, управление сервисами и других серверов или промежуточного программного обеспечения, что значительно расширяет горизонты для PHP-разработчиков. В настоящее время в этих областях недостаточно PHP-разработчиков, поэтому если вы хотите иметь свои технические преимущества в области PHP, не удовлетворяться ежедневной работой над CRUD или стремиться к тому, чтобы стать архитектором или техническим гуру, то изучение Workerman стоит того. Мы рекомендуем разработчикам не только уметь его использовать, но и способствовать развитию своих собственных open-source проектов на основе Workerman для повышения своих навыков и влиятельности. Например, Beanbun - многопроцессорный сетевой сканер - это хороший пример, который, несмотря на свое недавнее появление, уже получил множество положительных отзывов.

Некоторые направления применения Workerman включают:

  1. Мгновенное сообщение
    Например, мгновенное веб-частное общение, мгновенная рассылка сообщений, сообщение в приложении WeChat, мгновенная рассылка сообщений в приложении для мобильных устройств, мгновенная рассылка сообщений в ПК-приложении и так далее
    [Пример: чат-комната workerman, веб-рассылка сообщений, мгновенная чат-комната]

  2. Интернет вещей
    Например, связь Workerman с принтером, микроконтроллером, умным браслетом, умным домом, общественным велосипедом и так далее.
    [Примеры клиентов, такие как YiLink Cloud, YiBoShiDai и др.]

  3. Серверы игр
    Например, карточные игры, MMORPG и другие.
    [Пример: browserquest-php]

  4. HTTP-сервис
    Например, создание высокопроизводительного HTTP-интерфейса, высокопроизводительного веб-сайта. Если вы хотите создать HTTP-сервис или сайт, настоятельно рекомендуем использовать webman.

  5. Сервис ориентированный на архитектуру SOA
    Используя Workerman, можно запаковать различные функциональные блоки текущего бизнеса в форме сервиса и предоставить единый интерфейс для внешнего доступа, что позволяет достичь слабой связанности системы, облегчает ее обслуживание, обеспечивает высокую доступность и масштабируемость. [Примеры: workerman-json-rpc, workerman-thrift]

  6. Другие серверные приложения
    Например, GatewayWorker, PHPSocket.IO, HTTP-прокси, SOCKS5-прокси, распределенный коммуникационный компонент, распределенный компонент общих данных, очередь сообщений, сервер DNS, веб-сервер, сервер CDN, FTP-сервер и другие.

  7. Компоненты
    Например, асинхронный redis, асинхронный HTTP-клиент, MQTT-клиент в сфере интернета вещей, очередь сообщений workerman/redis-queue, workerman/stomp, workerman/rabbitmq, компонент мониторинга файлов, а также множество компонентов и фреймворков, разработанных третьими сторонами и т.д.

Очевидно, что традиционные MVC-фреймворки недостаточно функциональны для реализации вышеперечисленных задач, вот почему появился Workerman.

Философия Workerman

Простота, стабильность, высокая производительность, распределенность.

Простота

Маленькое значит красиво. Ядро Workerman очень просто, оно состоит всего из нескольких PHP-файлов и предоставляет лишь несколько интерфейсов, благодаря чему его обучение очень просто. Все остальное функциональность предоставляется в виде компонентов.

У Workerman есть хорошая документация, официальный сайт, активное сообщество, несколько групп на тысячи человек в программе QQ, множество высокопроизводительных компонентов и множество примеров. Все это делает использование Workerman более удобным для разработчиков.

Стабильность

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

Высокая производительность

Благодаря своему постоянному пребыванию в памяти и независимости от Apache/Nginx/PHP-FPM, а также отсутствия накладных расходов на общение между контейнерами и ядром PHP для каждого запроса, Workerman обладает очень высокой производительностью. По сравнению с традиционными MVC-фреймворками его производительность в десятки раз выше, а под нагрузкой QPS в PHP7 может быть даже выше, чем у одного Nginx.

Распределенность

Сейчас уже не время для работы в одиночку. Даже самый мощный сервер имеет свои ограничения, поэтому распределенное многосерверное развертывание является ключевым моментом. Workerman предоставляет прямое многоподключение с возможностью распределенной обработки GatewayWorker. Для добавления сервера достаточно просто настроить его и запустить, без изменения кода бизнес-логики, что увеличивает производительность системы в несколько раз. Если вам нужно разрабатывать приложения на длительное соединение по TCP, настоятельно рекомендуем использовать GatewayWorker, так как он является оберткой для Workerman, предоставляющей более богатый интерфейс для длительных соединений и мощные возможности распределенной обработки.

Область действия данного руководства

Версии Workerman 3.x - 4.x

Пользователи Windows (обязательно к ознакомлению)

Workerman поддерживает как систему Linux, так и Windows. Версия Workerman для Windows не зависит от каких-либо расширений, просто необходимо настроить переменные среды PHP. Информацию о установке и важные моменты для пользователей Windows смотрите здесь Обязательное прочтение для пользователей Windows.

Клиентская часть

Протоколы связи в Workerman открыты и настраиваемы, поэтому в теории Workerman может взаимодействовать с клиентами, использующими любые протоколы на любой платформе. При разработке клиентской части можно использовать соответствующий коммуникационный протокол для взаимодействия с серверной частью.