ReactPHP — это низкоуровневая библиотека для событийно-ориентированного программирования на PHP. В его основе лежит цикл событий, поверх которого он предоставляет низкоуровневые утилиты, такие как: абстракция потоков, асинхронный преобразователь DNS, сетевой клиент/сервер, HTTP-клиент/сервер и взаимодействие с процессами. Сторонние библиотеки могут использовать эти компоненты для создания асинхронных сетевых клиентов/серверов и многого другого.
<?php
// $ composer require react/http react/socket # install example using Composer
// $ php example.php # run example on command line, requires no additional web server
require __DIR__ . ' /vendor/autoload.php ' ;
$ server = new React Http HttpServer ( function ( Psr Http Message ServerRequestInterface $ request ) {
return React Http Message Response:: plaintext (
" Hello World! n"
);
});
$ socket = new React Socket SocketServer ( ' 127.0.0.1:8080 ' );
$ server -> listen ( $ socket );
echo " Server running at http://127.0.0.1:8080 " . PHP_EOL ;
Этот простой веб-сервер, написанный на ReactPHP, отвечает «Hello World!» для каждого запроса.
ReactPHP готов к производству и протестирован на миллионах установок из самых разных проектов по всему миру. Его архитектура, управляемая событиями, идеально подходит для эффективных сетевых серверов и клиентов, обрабатывающих сотни или тысячи одновременных подключений, длительно работающих приложений и многих других форм совместной многозадачности с неблокирующими операциями ввода-вывода. Что делает ReactPHP особенным, так это его яркая экосистема с сотнями сторонних библиотек, позволяющая интегрироваться со многими существующими системами, такими как общие сетевые службы, системы баз данных и другие сторонние API.
ReactPHP по умолчанию неблокируется. Используйте работников для блокировки ввода-вывода. Цикл событий основан на шаблоне реактора (отсюда и название) и во многом основан на таких библиотеках, как EventMachine (Ruby), Twisted (Python) и Node.js (V8).
Этот репозиторий, который вы сейчас просматриваете, в основном используется как метарепозиторий для обсуждения и планирования всего, что связано с @ReactPHP. См. отдельные компоненты, ссылки на которые приведены ниже, для получения более подробной информации о каждом компоненте, его документации и исходном коде.
EventLoop Цикл событий основного реактора ReactPHP. Прочтите документацию
Потоковая передача управляемых событиями потоков для чтения и записи для неблокирующего ввода-вывода в ReactPHP. Прочтите документацию
Promise Promises/Реализация для PHP. Прочтите документацию
Async Асинхронные утилиты и волокна для ReactPHP. Прочтите документацию
Socket Async, потоковая передача открытого текста TCP/IP и безопасные сокет-серверные и клиентские соединения TLS для ReactPHP. Прочтите документацию
Датаграммные клиентские и серверные сокеты UDP, управляемые событиями, для ReactPHP. Прочтите документацию
HTTP Реализация потокового HTTP-клиента и сервера для ReactPHP, управляемая событиями. Прочтите документацию
DNS Асинхронный преобразователь DNS для ReactPHP. Прочтите документацию
Кэширование асинхронного кэширования для ReactPHP. Прочтите документацию
Библиотека ChildProcess для выполнения дочерних процессов. Прочтите документацию
PromiseTimer Тривиальная реализация тайм-аута для библиотеки Promise lib ReactPHP. Прочтите документацию
PromiseStream Недостающее звено между Promise-land и Stream-land, построенное на основе ReactPHP. Прочтите документацию
PHP-клиент и библиотека маршрутизаторов Thruway для автобанов и WAMP (протокол обмена сообщениями веб-приложений) для обмена сообщениями приложений в реальном времени voryx/Thruway
PPM — менеджер процессов PHP PPM — это менеджер процессов, средство нагнетания нагрузки и балансировщик нагрузки для современных PHP-приложений. php-pm/php-pm
php-ar-drone Порт node-ar-drone, который позволяет пользователю управлять дроном Parrot AR через PHP jolicode/php-ar-drone.
Ratchet Асинхронный сервер WebSocket ratchetphp/Ratchet
PredisAsync Асинхронная клиентская библиотека PHP для Redis, построенная на основе ReactPHP nrk/predis-async
ключ/redis-server Реализация сервера Redis на чистом PHP
И многое другое на нашей вики-странице »
Сергей Жук Серия статей о ReactPHP: от основ к реальным примерам применения. sergeyzhuk.me
Серия блогов Cees-Jan Kiewiet о нескольких компонентах ReactPHP и о том, как они работают. blog.wyrihaximus.net
Лоик Фожерон Super Speed Symfony — ReactPHP. gnugat.github.io
Марк Дж. Шмидт Обеспечьте высокую производительность вашего PHP-приложения (с помощью ReactPHP). marcjschmidt.de
Марк Морера , когда ReactPHP встречается с Symfony medium.com/@apisearch
Кристиан Люк Расширяя границы с помощью ReactPHP
Джереми Микола Асинхронный PHP с React
Игорь Видлер Событийно-ориентированный PHP
ReactPHP состоит из набора отдельных компонентов. Это означает, что вместо установки чего-то вроде «фреймворка ReactPHP» вы фактически выбираете только те компоненты, которые вам нужны.
Этот проект следует за SemVer во всех его стабильных компонентах. Рекомендуемый способ установки этих компонентов — через Composer. Впервые в Composer?
Например, это может выглядеть примерно так:
# recommended install: pick required components
composer require react/event-loop react/http
В качестве альтернативы мы также предоставляем мета-пакет, который установит все стабильные компоненты одновременно. Устанавливать это рекомендуется только для быстрого прототипирования, так как список стабильных компонентов может меняться со временем. Этот метапакет можно установить следующим образом:
# quick protoyping only: install all stable components
composer require react/react:^1.4
Для получения более подробной информации посетите домашнюю страницу ReactPHP, где вы найдете примеры быстрого запуска и подробности использования.
Подробную информацию об обновлениях версий см. также в объединенном журнале изменений для всех компонентов ReactPHP.
У вас есть вопрос и вам нужна помощь с ReactPHP? Не волнуйтесь, мы здесь, чтобы помочь!
В качестве первого шага проверьте подробную документацию, прилагаемую к каждому компоненту (см. ссылки на отдельную документацию для каждого компонента выше). Если вы обнаружите, что на ваш вопрос нет ответа в документации, есть большая вероятность, что он может быть интересен большему количеству людей. Пожалуйста, не стесняйтесь задавать свой вопрос как проблему в соответствующем компоненте, чтобы другие также могли принять участие.
Вы также можете посетить наш официальный чат Gitter. Большинство людей, участвующих в этом проекте, доступны в этом чате, поэтому на многие вопросы можно получить ответы в течение нескольких минут или нескольких часов. Мы также используем этот чат, чтобы анонсировать все новые выпуски и текущие разработки, поэтому рассмотрите возможность остаться в этом чате еще немного.
Также следите за обновлениями @reactphp в Твиттере. Мы используем это в основном для примечательных, крупных обновлений и для того, чтобы держать сообщество в курсе текущих усилий по разработке. Вы всегда можете использовать хэштег #reactphp
если вам есть чем поделиться!
Мы очень открытый проект и предпочитаем публичное общение, когда это возможно, чтобы больше людей могли принять участие и помочь найти лучшие доступные решения. В то же время мы понимаем, что некоторые вещи лучше обсуждать наедине. Если вы просто хотите сказать спасибо , сообщить о проблеме безопасности или помочь спонсировать разработку определенной функции, вы можете лично обратиться к основной команде, отправив электронное письмо на адрес [email protected]
. Пожалуйста, имейте в виду, что мы небольшая команда волонтеров и делаем все возможное, чтобы поддержать всех, кто обращается к нам.
Хотите ли вы поддержать ReactPHP? Потрясающий! Давайте начнем с того, что расскажем всему миру, почему вы считаете ReactPHP замечательным, и постараемся помочь другим присоединиться к нему! Отправьте твит, напишите сообщение в блоге, выступите с докладом в местной группе пользователей или на конференции или даже напишите книгу. Есть много способов помочь. Вы всегда можете обратиться к нам лично и помочь другим по нашим каналам поддержки. Спасибо!
Чтобы запустить набор тестов, вам сначала необходимо клонировать этот репозиторий, а затем установить все зависимости через Composer:
composer install
Чтобы запустить набор тестов, перейдите в корень проекта и запустите:
vendor/bin/phpunit
Набор тестов также содержит ряд функциональных интеграционных тестов, которые полагаются на стабильное подключение к Интернету. Из-за большого количества интеграционных тестов они по умолчанию пропускаются во время CI. Если вы также не хотите их запускать, их можно просто пропустить следующим образом:
vendor/bin/phpunit --exclude-group internet
MIT, см. ЛИЦЕНЗИЮ.