Plateformes asynchrones

Note

Ubiquity supporte plusieurs plateformes : Swoole, Workerman, RoadRunner, PHM-PM,ngx_php.

Swoole

Installer l’extension Swoole sur votre système (linux) ou dans votre image Docker :

#!/bin/bash
pecl install swoole

Lancer Ubiquity Swoole (la première fois, le paquet ubiquity-swoole sera installé) :

Ubiquity serve -t=swoole

Configuration du serveur

.ubiquity/swoole-config.php
<?php
return array(
    "host" => "0.0.0.0",
    "port" => 8080,
    "options"=>[
        "worker_num" => \swoole_cpu_num() * 2,
            "reactor_num" => \swoole_cpu_num() * 2
        ]
);

Le port peut aussi être changé au démarrage du serveur :

Ubiquity serve -t=swoole -p=8999

Optimisation des services

Le démarrage des services ne sera effectué qu’une seule fois, au démarrage du serveur.

app/config/services.php
\Ubiquity\cache\CacheManager::startProd($config);
\Ubiquity\orm\DAO::setModelsDatabases([
     'models\\Foo' => 'default',
     'models\\Bar' => 'default'
]);

\Ubiquity\cache\CacheManager::warmUpControllers([
     \controllers\IndexController::class,
     \controllers\FooController::class
]);

$swooleServer->on('workerStart', function ($srv) use (&$config) {
     \Ubiquity\orm\DAO::startDatabase($config, 'default');
     \controllers\IndexController::warmup();
     \controllers\FooController::warmup();
});
La méthode warmUpControllers :
  • Instancie les contrôleurs

  • Effectue l’injection de dépendances

  • prépare l’appel des méthodes initialize et finalize (initialisation des constantes d’appel)

Au démarrage de chaque Worker, la méthode warmup des contrôleurs peut par exemple initialiser les requêtes DAO préparées :

app/controllers/FooController.php
     public static function warmup() {
             self::$oneFooDao = new DAOPreparedQueryById('models\\Foo');
             self::$allFooDao = new DAOPreparedQueryAll('models\\Foo');
     }

Workerman

Workerman ne nécessite aucune installation particulière (sauf pour libevent qu’il est recommandé d’utiliser en production pour des raisons de performance).

Lancer Ubiquity Workerman (la première fois, le paquet ubiquity-workerman sera installé) :

Ubiquity serve -t=workerman

Configuration du serveur

.ubiquity/workerman-config.php
<?php
return array(
    "host" => "0.0.0.0",
    "port" => 8080,
    "socket"=>[
        "count" => 4,
        "reuseport" =>true
    ]
);

Le port peut aussi être changé au démarrage du serveur :

Ubiquity serve -t=workerman -p=8999

Optimisation des services

Le démarrage des services ne sera effectué qu’une seule fois, au démarrage du serveur.

app/config/services.php
\Ubiquity\cache\CacheManager::startProd($config);
\Ubiquity\orm\DAO::setModelsDatabases([
     'models\\Foo' => 'default',
     'models\\Bar' => 'default'
]);

\Ubiquity\cache\CacheManager::warmUpControllers([
     \controllers\IndexController::class,
     \controllers\FooController::class
]);

$workerServer->onWorkerStart = function () use ($config) {
     \Ubiquity\orm\DAO::startDatabase($config, 'default');
     \controllers\IndexController::warmup();
     \controllers\FooController::warmup();
});

ngx_php

//TODO

Roadrunner

//TODO