ReactPHP é uma biblioteca de baixo nível para programação orientada a eventos em PHP. Em sua essência está um loop de eventos, além do qual fornece utilitários de baixo nível, como: abstração de fluxos, resolvedor DNS assíncrono, cliente/servidor de rede, cliente/servidor HTTP e interação com processos. Bibliotecas de terceiros podem usar esses componentes para criar clientes/servidores de rede assíncronos e muito mais.
<?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 ;
Este servidor web simples escrito em ReactPHP responde com "Hello World!" para cada solicitação.
O ReactPHP está pronto para produção e testado em batalha com milhões de instalações de todos os tipos de projetos em todo o mundo. Sua arquitetura orientada a eventos o torna perfeito para servidores e clientes de rede eficientes que lidam com centenas ou milhares de conexões simultâneas, aplicativos de longa execução e muitas outras formas de multitarefa cooperativa com operações de E/S sem bloqueio. O que torna o ReactPHP especial é seu ecossistema vívido com centenas de bibliotecas de terceiros que permitem a integração com muitos sistemas existentes, como serviços de rede comuns, sistemas de banco de dados e outras APIs de terceiros.
ReactPHP não bloqueia por padrão. Use trabalhadores para bloquear E/S. O loop de eventos é baseado no padrão reactor (daí o nome) e fortemente inspirado em bibliotecas como EventMachine (Ruby), Twisted (Python) e Node.js (V8).
Este repositório que você está vendo atualmente é usado principalmente como um meta-repositório para discutir e planejar todas as coisas do @ReactPHP. Consulte os componentes individuais vinculados abaixo para obter mais detalhes sobre cada componente, sua documentação e código-fonte.
EventLoop O loop de eventos do reator principal do ReactPHP. Leia a documentação
Stream Fluxos legíveis e graváveis orientados por eventos para E/S sem bloqueio no ReactPHP. Leia a documentação
Promessa Promessas/Uma implementação para PHP. Leia a documentação
Async Utilitários e fibras assíncronas para ReactPHP. Leia a documentação
Soquete assíncrono, streaming de TCP/IP de texto simples e conexões seguras de servidor e cliente de soquete TLS para ReactPHP. Leia a documentação
Cliente UDP orientado a eventos de datagrama e soquetes de servidor para ReactPHP. Leia a documentação
Implementação de cliente e servidor HTTP de streaming orientado a eventos HTTP para ReactPHP. Leia a documentação
DNS Resolvedor DNS assíncrono para ReactPHP. Leia a documentação
Cache Cache assíncrono para ReactPHP. Leia a documentação
Biblioteca ChildProcess para execução de processos filhos. Leia a documentação
PromiseTimer Implementação de tempo limite trivial para a biblioteca Promise do ReactPHP. Leia a documentação
PromiseStream O elo perdido entre Promise-land e Stream-land, construído sobre ReactPHP. Leia a documentação
Thruway PHP Client and Router Library para Autobahn e WAMP (Web Application Messaging Protocol) para mensagens de aplicativos em tempo real voryx/Thruway
PPM - PHP Process Manager PPM é um gerenciador de processos, superalimentador e balanceador de carga para aplicativos PHP modernos. php-pm/php-pm
php-ar-drone Porta de node-ar-drone que permite ao usuário controlar um Parrot AR Drone através de PHP jolicode/php-ar-drone
Servidor WebSocket assíncrono Ratchet ratchetphp/Ratchet
PredisAsync Biblioteca cliente PHP assíncrona para Redis construída sobre ReactPHP nrk/predis-async
pista/redis-server Uma implementação de servidor Redis em PHP puro pista/redis-server
E muito mais em nossa página wiki »
Sergey Zhuk Uma série de artigos cobrindo ReactPHP: do básico aos exemplos reais de aplicação. sergeyzhuk.me
Série Cees-Jan Kiewiet Blog sobre vários componentes do ReactPHP e como eles funcionam. blog.wyrihaximus.net
Loïc Faugeron Super Speed Symfony - ReactPHP. gnugat.github.io
Marc J. Schmidt traga alto desempenho para seu aplicativo PHP (com ReactPHP). marcjschmidt.de
Marc Morera Quando o ReactPHP conhece o Symfony Medium.com/@apisearch
Christian Lück Ultrapassando os limites com ReactPHP
Jeremy Mikola PHP assíncrono com React
Igor Wiedler PHP orientado a eventos
ReactPHP consiste em um conjunto de componentes individuais. Isso significa que, em vez de instalar algo como uma "estrutura ReactPHP", você escolhe apenas os componentes necessários.
Este projeto segue o SemVer em todos os seus componentes estáveis. A forma recomendada de instalar esses componentes é através do Composer. Novo no Compositor?
Por exemplo, isso pode ser algo assim:
# recommended install: pick required components
composer require react/event-loop react/http
Como alternativa, também fornecemos um meta pacote que instalará todos os componentes estáveis de uma só vez. A instalação é recomendada apenas para prototipagem rápida, pois a lista de componentes estáveis pode mudar com o tempo. Este meta pacote pode ser instalado assim:
# quick protoyping only: install all stable components
composer require react/react:^1.4
Para mais detalhes, confira a página inicial do ReactPHP para exemplos de início rápido e detalhes de uso.
Veja também o changelog combinado de todos os componentes do ReactPHP para obter detalhes sobre atualizações de versão.
Você tem alguma dúvida e precisa de ajuda com ReactPHP? Não se preocupe, estamos aqui para ajudar!
Como primeiro passo, verifique a documentação elaborada que acompanha cada componente (veja os links para a documentação individual de cada componente acima). Se você achar que sua pergunta não foi respondida na documentação, há uma boa chance de que ela seja relevante para mais pessoas. Não hesite em registrar sua pergunta como um problema no componente relevante para que outras pessoas também possam participar.
Você também pode conferir nossa sala de bate-papo oficial do Gitter. A maioria das pessoas envolvidas neste projeto estão disponíveis nesta sala de chat, portanto muitas perguntas são respondidas em poucos minutos a algumas horas. Também usamos esta sala de chat para anunciar todos os novos lançamentos e esforços de desenvolvimento contínuos, então considere ficar nesta sala de chat por mais algum tempo.
Siga também @reactphp no Twitter para atualizações. Usamos isso principalmente para atualizações maiores e notáveis e para manter a comunidade atualizada sobre os esforços de desenvolvimento contínuos. Você sempre pode usar a hashtag #reactphp
se tiver algo para compartilhar!
Somos um projeto muito aberto e preferimos a comunicação pública sempre que possível, para que mais pessoas possam participar e ajudar a obter as melhores soluções disponíveis. Ao mesmo tempo, percebemos que algumas coisas são melhor abordadas em privado. Se você deseja apenas agradecer , relatar um problema de segurança ou ajudar a patrocinar o desenvolvimento de um determinado recurso, você pode entrar em contato com a equipe principal em particular enviando um e-mail para [email protected]
. Tenha em mente que somos uma pequena equipe de voluntários e fazemos o nosso melhor para apoiar qualquer pessoa que entre em contato.
Você quer oferecer suporte ao ReactPHP? Incrível! Vamos começar contando ao mundo por que você acha o ReactPHP incrível e tentar ajudar outras pessoas a embarcarem! Envie um tweet, escreva uma postagem no blog, faça uma palestra em seu grupo de usuários local ou conferência ou até mesmo escreva um livro. Há muitas maneiras de ajudar. Você sempre pode entrar em contato conosco em particular e ajudar outras pessoas em nossos canais de suporte. Obrigado!
Para executar o conjunto de testes, primeiro você precisa clonar este repositório e depois instalar todas as dependências através do Composer:
composer install
Para executar o conjunto de testes, vá até a raiz do projeto e execute:
vendor/bin/phpunit
O conjunto de testes também contém vários testes de integração funcional que dependem de uma conexão estável à Internet. Devido ao grande número de testes de integração, eles são ignorados por padrão durante as execuções do CI. Se você também não quiser executá-los, eles podem simplesmente ser ignorados assim:
vendor/bin/phpunit --exclude-group internet
MIT, consulte LICENÇA.