Download the PHP package itnelo/reactphp-foundation without Composer
On this page you can find all versions of the php package itnelo/reactphp-foundation. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download itnelo/reactphp-foundation
More information about itnelo/reactphp-foundation
Files in itnelo/reactphp-foundation
Package reactphp-foundation
Short Description Some hull parts and scrap to bootstrap an elegant spacecraft w/ ReactPHP
License MIT
Homepage https://github.com/itnelo/reactphp-foundation
Informations about the package reactphp-foundation
ReactPHP Foundation
- What's inside?
- Installation
- Docker Swarm
- Tests
- See also
- Changelog
What's inside?
This skeleton for self-sufficient, asynchronous microservice contains:
- Interfaces
psr/log
— PSR-3 (Logger)psr/http-message
— PSR-7 (HTTP Message)psr/container
— PSR-11 (Container)
- Decoupling code via Symfony's container
symfony/dependency-injection
- Ensure the non-blocking I/O with ReactPHP components
react/event-loop
react/http
react/stream
- Managing environment and configurations
symfony/dotenv
symfony/config
symfony/yaml
It follows strong SOLID design and fully PSR-compatible, built with PHP 7.4+ features in mind (starting with typed properties).
It is also relatively lightweight and takes benefits from both Symfony components and ReactPHP without raising up a heavy artillery setup.
There are a few deployment configurations (Docker Compose project and stack for Docker Swarm, featuring HAProxy as a load balancer for your code).
Installation
Docker Swarm
This setup provides a basic service scalability using Swarm mode. For testing purposes, let's assume we have the following servers:
Pre-requirements. Ensure all necessary ports are accessible on each machine
or it may cause implicit problems during communication between nodes.
A common symptom is a successful nslookup
for all replicas within overlay,
but a failed ping
of some of them. Here is a quick list:
Limitations. This setup assumes you are using a single haproxy instance, on the fixed node in the cluster and only that node will have its ports published:
Step 1. Create a manager node (for haproxy with exposed ports):
And a few worker nodes:
where JOIN_TOKEN
is a parameter obtained by docker swarm join-token worker
on the manager node.
Repeat this action for all other worker servers in your cluster
using their own advertise addresses.
Step 2. Assign geography labels to be able to evenly distribute containers between all available servers:
where HOSTNAME
is a server identifier, see docker node ls
on the manager node.
Step 3. Clone the repository and adjust environment variables:
Fill APP_STACK_IMAGE_NAME
and APP_STACK_IMAGE_VERSION
with your image metadata
from the desired registry.
Step 4. Apply stack configuration:
You should also adjust placement constraints
(according to Step 2) to ensure Swarm scheduler is able to assign tasks
to the configured nodes. Check haproxy.stack.cfg
from the docker
directory
if you have changed some ports or just use a custom haproxy image as well.
Step 5. Deploy services:
By accessing 192.169.56.1:6637/stats
(if you stick to the default configuration;
use your manager node IP) a rendered page with backend statistics should be available:
To rebalance app replicas between nodes, after one is added or removed, use:
Tests
Apply test suite configuration and run phpunit:
See also
- driftphp/driftphp — If you are looking for a deeper Symfony integration, with Kernel adaptation to async environment.
- thesecretlivesofdata.com/raft — A helpful visualization to understand how the distributed consensus algorithm, used by Docker Swarm, works.
Changelog
All notable changes to this project will be documented in CHANGELOG.md.
All versions of reactphp-foundation with dependencies
ext-pcntl Version >=7.4
psr/container Version ^1.0
psr/http-message Version ^1.0
psr/log Version ^1.1
react/event-loop Version ^1.1
react/http Version ^0.8.6
react/stream Version ^1.1
symfony/config Version ^5.1
symfony/dependency-injection Version ^5.1
symfony/dotenv Version ^5.1
symfony/yaml Version ^5.1
wyrihaximus/react-psr-3-stdio Version ^2.1