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
<?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.
\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 :
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
<?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.
\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