Asynchronous PHP
Over time, I've noticed a lot of interesting information, code, and people centered around topics related to asynchronous programming using PHP. I thought it might be useful to try to catalog them all in one place. This repository is the result and fairly experimental in concept. Feel free to file an issue or submit a pull request if you think there's anything that should be added or changed.
Concepts
Asynchronous
- Asynchronous I/O - Wikipedia
- Async PHP by Christopher Pitt / assertchris
Blocking
Concurrency
Coroutines
- Cooperative multitasking with generators by Christopher Pitt / assertchris
- Cooperative multitasking using coroutines (in PHP!) by Nikita Popov / nikic
- Coroutine - Wikipedia
Events
Multitasking
Observables
Promises
- Futures and promises - Wikipedia
- Promises and Generators by Evert Pot / evert
Reactive Programming
- Reactive programming - Wikipedia
- The introduction to Reactive Programming you've been missing by AndrΓ© Staltz / staltz
Threads
- Thread (computing) - Wikipedia
- Thread carefully by Maxime Fabre
Projects
amphp
A non-blocking concurrency framework for PHP applications.
- GitHub: amphp
- Website: amphp.org
- amphp blog series by Niklas Keller / kelunik
appserver.io
A multithreaded application server for PHP, written in PHP.
- GitHub: appserver-io
- Website: http://appserver.io/
Async PHP
- GitHub: asyncphp
Icicle
A PHP library for writing asynchronous code using synchronous coding techniques.
Deprecated in favor of Amp v2.
- Github: icicleio
Kraken
PHP framework for creating multi-processed, multi-threaded, fault-tolerant applications using event-driven, message-driven and agent-based architecture.
- GitHub: kraken-php
- Website: kraken-php.com
phpDaemon
Asynchronous server-side framework for network applications implemented in PHP using libevent.
React
Event-driven, non-blocking I/O with PHP.
- GitHub: reactphp
- Website: reactphp.org
- React series by Cees-Jan Kiewiet / wyrihaximus
Recoil
Cooperative multitasking for PHP via coroutines.
Revolt
- GitHub: revoltphp
- Website: revolt.run
Swoole
Asynchronous concurrent distributed networking framework for PHP
- GitHub: swoole
- Website: swoole.co.uk
Repositories
Asynchronous
- asm89/Rx.PHP - Libraries to compose asynchronous and event-based programs using observable collections and LINQ-style query operators
- clue/php-block-react - Lightweight library that eases integrating async components built for React in a traditional blocking environment
- spatie/async - Asynchronous and parallel PHP, this library provides a small and easy wrapper around PHP's PCNTL extension. It allows running of different processes in parallel, with an easy-to-use API
Caching
- amphp/cache - A promise-aware caching API built on amp
- amphp/redis - An async redis client built on amp
- asyncphp/icicle-cache - A simple cache library, built for Icicle, with anti-stampede and promises
- clue/php-redis-react - Async Redis client implementation built on React
- clue/php-redis-server - A redis server implementation in pure PHP
- nrk/predis-async - Asynchronous Redis client library built on React
- reactphp/cache - React async caching
- swoole/redis-async - Asynchronous Redis client for PHP with built-in connection pooling
CLI
- clue/php-bitbake-react - Programmatically control your bitbake build shell built on React
- clue/php-readline-react - Experimental reactive binding for ext-readline, built on React
- clue/php-shell-react - Run async commands within any interactive shell command built on React
- clue/php-stdio-react - Async event-driven and UTF-8 aware standard console input & output for React
- php-pm/php-pm - CLI process manager for modern Request-Response PHP Applications - with a builtin load-balancer built on React
Compression
- clue/php-tar-react - Async streaming parser for the TAR file format built on React
- clue/php-zlib-react - Streaming zlib compressor and decompressor built on React
Databases
- amphp/mysql - An async mysql client built on amp
- amphp/pgsql - A non-blocking PostgreSQL library built on amp
- Swoole Async Mysql Client - Async MySQL client for PHP
DNS
- amphp/dns - Async DNS resolution built on amp
- clue/php-mdns-react - Simple async multicast DNS (mDNS) resolver built on React
- reactphp/dns - Asynchronous DNS resolver
Events
- asyncphp/remit - Distributed event emitter
- kraken-php/event - Library implementing EventEmitters and EventListeners for Kraken PHP
- kraken-php/loop - An abstraction layer for writing asynchronous code in PHP on single thread or process with usage of single or multiple computing flows
- reactphp/event-loop - React's core reactor event-loop
- recoilphp/event-emitter - A coroutine-based event emitter
- revolt/event-loop - A rock-solid event loop for concurrent PHP applications
- sabre/event - Lightweight library for event-based development
Filesystems
- amphp/file - An async filesystem library built on amp
- reactphp/filesystem - Evented filesystem access
- WyriHaximus/reactphp-filesystem-s3 - AWS S3 adapter for reactphp/filesystem
GUIs
- clue/php-zenity-react - Build graphical desktop (GUI) applications in PHP
HTTP
- amphp/artax - An async HTTP/1.1 client built on amp
- clue/php-buzz-react - Simple async HTTP client for concurrently processing requests built on React
- kraken-php/network - TCP, HTTP and WebSocket Server for Kraken
- reactphp/http - React HTTP server
- reactphp/http-client - Asynchronous HTTP client library
- WyriHaximus/react-guzzle-psr7 - React HTTP client adapter for Guzzle 6
- WyriHaximus/ReactGuzzleRing - React HTTP client wrapper for Guzzle 5
- WyriHaximus/ReactGuzzle - React HTTP client wrapper for Guzzle 4
Interoperability
- kraken-php/loop - Loop implementation for Kraken with a set of React adapters.
IRC
- clue/php-quassel-react - Streaming event-driven access to your Quassel IRC core built on React
- phergie/phergie-irc-bot-react - IRC bot built on React
Messaging
- kraken-php/channel - IPC abstraction for various models implementing heartbeat mechanism, routing system and more
- kraken-php/ipc - Asynchronous IPC models for Kraken including Socket and ZMQ
- reactphp/stomp - STOMP bindings for React
- reactphp/zmq - ZeroMQ bindings for React
Multitasking
- amphp/amp - A non-blocking concurrency framework for PHP applications
- amphp/process - An async process dispatcher built on amp
- amphp/thread - An async multi-threaded task dispatcher built on amp
- asyncphp/assistant - A neat wrapper around multi-process abstractions and distributed event emitters
- asyncphp/doorman - Child process management
- krake-php/runtime - Container-based abstractions for Threads and Processes with delegated supervising
- reactphp/child-process - Library for executing child processes
- recoilphp/recoil - Cooperative multitasking for PHP via coroutines
- WyriHaximus/reactphp-child-process-messenger - Plain messages and RPC style STDIN/OUT/ERR wrapper around react/child-process
- WyriHaximus/reactphp-child-process-pool - Pool implementation for WyriHaximus/reactphp-child-process-messenger
Networking
- clue/php-ami-react - Simple async event-driven access to the Asterisk Manager Interface (AMI) built on React
- clue/php-icmp-react - Simple async low-level ICMP (ping) messaging library built on React
- clue/php-multicast-react - Simple multicast UDP messages built on React
- clue/php-ssdp-react - Async Simple Service Discovery Protocol (SSDP) built on React
- clue/php-solusvm-api-react - Simple async access to your VPS box through the SolusVM API built on React
- clue/php-socks-react - Async SOCKS TCP tunnel proxy client and server built on React
- clue/php-wake-on-lan-react - Turn on your PC with Wake-On-LAN requests via React
- reactphp/datagram - UDP client and server sockets for React
- reactphp/whois - Whois client based on React
- umpirsky/wisdom - Domain availability checker
- WyriHaximus/PhuninNode - munin-node port aiming to provide application monitoring utilizing munin
Promises
- guzzle/promises - Promises/A+ library for PHP with synchronous support
- kraken-php/promise - Implementation of Promise/A+ promises with cancellation support
- reactphp/promise - A lightweight implementation of CommonJS Promises/A for PHP
- reactphp/promise-timer - Timeout implementation for the React promises library
Sockets and Streams
- amphp/socket - Non-blocking socket and TLS functionality built on amp
- clue/php-socket-react - Binding for raw sockets (ext-sockets) in React
- kraken-php/ipc - Asynchronous Socket listener and client
- kraken-php/stream - Asynchronous Streams
- reactphp/socket - Asynchronous socket server
- reactphp/socket-client - Async connector to open TCP/IP and SSL/TLS based connections
- reactphp/stream - Asynchronous OO stream wrapper
- WyriHaximus/reactphp-psr7-stream-converter - PSR-7 to React stream converter and vice versa
Web Applications
- amphp/aerys - A non-blocking HTTP application, WebSocket and file server
- amphp/aerys-session - Session management for Aerys server
- bixuehujin/blink - Microframework for building long-running high-performance services
- clue/php-sse-react - Streaming async HTML5 Server-Sent Events server built on React
- kraken-php/framework - PHP framework for creating multi-processed, multi-threaded, fault-tolerant applications using event-driven, message-driven and agent-based architecture
- ratchetphp/Pawl - Asynchronous WebSocket client
- ratchetphp/Ratchet - Asynchronous WebSocket server
- reactphp/espresso - Proof-of-concept microframework that integrates Silex with React
- swoole/swoole-src - Event-based concurrent framework for internet applications in PHP, written in C
- voryx/Thruway - client and router implementation of the Web Application Messaging Protocol built on React
Web Services
- bergie/dnode-php - DNode RPC protocol implementation
- clue/php-packagist-api-react - Simple async access to packagist.org's API
- clue/php-viewvc-api-react - Simple async API-like access to your ViewVC web interface built on React
- clue/php-soap-react - A simple async SOAP webservice client built on React
- itnelo/reactphp-webdriver - Async Selenium WebDriver for React (Grid API client, W3C compliant)
People
- Aaron Piotrowski / trowski - GitHub
- Alexander / asm89 - GitHub
- Bob Weinand / bwoebi - GitHub, Twitter
- Cees-Jan Kiewiet / wyrihaximus - GitHub, Twitter
- Chris Boden / cboden - GitHub, Twitter
- Christian LΓΌck / clue - GitHub, Twitter
- Christopher Pitt / assertchris - GitHub, Twitter, Twitch
- Daniel Lowrey / rdlowrey - GitHub, Twitter
- Kamil Jamroz / khelle - GitHub
- Niklas Keller / kelunik - GitHub, Twitter