On Sun, Dec 24, 2023 at 10:44 PM Jordan LeDoux <jordan.led...@gmail.com>
wrote:

>
>
> On Sat, Dec 23, 2023 at 12:34 PM Kévin Dunglas <ke...@dunglas.fr> wrote:
>
>> Hello and Merry Christmas!
>>
>> One of the main features of FrankenPHP is its worker mode, which lets you
>> keep a PHP application in memory to handle multiple HTTP requests.
>>
>> Worker modes are becoming increasingly popular in the PHP world. Symfony
>> (Runtime Component), Laravel (Octane), and many projects based on these
>> frameworks (API Platform, Sulu...) now support a worker mode.
>>
>> In addition to FrankenPHP, projects such as RoadRunner and Swoole provide
>> engines supporting worker modes.
>>
>> According to benchmarks, worker modes can improve the performance of PHP
>> applications by up to 15 times.
>> In addition to FrankenPHP, which is basically a SAPI for Go's integrated
>> web server, a new generation of SAPIs is currently under development.
>> Several SAPIs written in Rust (including one by the RoadRunner team) are
>> currently under development.
>>
>> These SAPIs, along with existing SAPIs, could benefit from a shared
>> infrastructure to build worker modes.
>>
>>
>>
>> The FrankenPHP code is written and should be easy to move around in PHP
>> itself, to enable other SAPIs to use it.
>>
>> In addition to sharing code, maintenance, performance optimization, etc.,
>> the existence of a common infrastructure would standardize the way worker
>> scripts are created and provide a high-level PHP API for writing worker
>> scripts that work with all SAPIs that rely on this new feature.
>>
>> SAPIs will still have to handle fetching requests from the web server and
>> pausing the worker to wait for new requests (in FrankenPHP, we use
>> GoRoutines for this, in Rust or C, other primitives will have to be used),
>> but almost everything else could be shared.
>>
>> For reference, here's the FrankenPHP code I propose to integrate into
>> libphp: https://github.com/dunglas/frankenphp/blob/main/frankenphp.c#L245
>>
>> The public API is documented here:
>> https://frankenphp.dev/docs/worker/#custom-apps
>>
>> I'd like to hear what the community thinks about this. Would you be
>> interested in this functionality in PHP? Should I work on an RFC?
>>
>> If there's interest, I can work on a patch.
>>
>> Cheers,
>> --
>> Kévin Dunglas
>>
>
> Much like Larry, I'm curious what sort of scope you imagine for this. Are
> you imagining something that is geared specifically towards HTTP requests,
> or would this be a more generic "PHP Application Worker" that might be
> spawned to handle other types of applications? Could we have a worker
> listen to a specific port and respond to or handle all requests on that
> port/device?
>
> Jordan
>

Ho Jordan,

Yes, the scope I imagine is geared specifically towards HTTP requests.
Something more generic than common primitives for SAPIs and a shared public
API to handle HTTP requests with a long-running PHP worker script will be
hard to do outside of SAPIs because they depend on a lot of external
concerns such as the programming language the SAPI is using.

Reply via email to