airship
airship copied to clipboard
Non-Blocking I/O Servers Support ( Swoole, ReactPHP, Amp ... etc )
i intend to follow up with PR next week, first i have some questions :
- does AirShip uses any global variables ? ( $_COOKIES, $_POST, $_GET ... etc)
- does AirShip uses any HTTP related function ? ( e.g: header(), setcookie() ... etc )
- does AirShip uses PHP Session Extension functions ? ( e.g: session_start() ... etc )
for this i suggest having 1 class AirShip\Networking\Server
and multiple drivers ( e.g : AirShip\Networking\Server\Driver\SwooleDriver
, AirShip\Networking\Server\Driver\AmpDriver
.. etc )
i think first we need few changes before supporting Swoole
or any other non-blocking IO server ( such ReactPHP
or Amp
) :
- new session interface instead of
ParagonIE\Cookie\Session
- one that doesn't rely on the session extension
- use
dflydev/fig-cookies
instead ofParagonIE\Cookie\Cookie
- we can build a wrapper around this for encryption by example
- PSR-15 support :
- MIDDLEWARES ARE COOL !
- clean the mess in public/index.php
- error handling and enabling debug can be done in an early middleware
- PSR-6 support :
- we can use
symfony/cache
,cache/cache
or any other implementations - allow implementing a new session based on PSR-6
- we can use
what do you think @paragonie-scott
things that can done in a middleware :
- AirShip\Networking\Middleware\DebugMiddleware
- AirShip\Networking\Middleware\ErrorLoggingMiddleware
- AirShip\Networking\Middleware\AutoUpdateMiddleware
- AirShip\Networking\Middleware\SessionStartMiddleware
- AirShip\Networking\Middleware\SessionCanaryMiddleware
- AirShip\Networking\Middleware\CSPMiddleware
- AirShip\Networking\Middleware\HPKPMiddleware
- AirShip\Networking\Middleware\StaticCacheMiddleware
... and much more
this will result in much cleaner setup and bring us closer to using Servers such as Swoole, ReactPHP, Amp .. etc.
@azjezz how would you envision async support as no part of airship is build with non blocking support in mind?
@PeeHaa the only problem i currently see is the usage of global variables and the session extension, but for now I'm waiting for @paragonie-scott opinion on this.
the usage of global variables $_GET and $_POST can be avoided by using the PSR7 request, $_COOKIES can be avoided by using dflydev/fig-cookies instead of ParagonIE\Cookie\Cookie and we need a new session implementation, one that doesn't use the session extension, something like this : zendframework/zend-expressive-session-cache