Plataformas asíncronas
Nota
Ubiquity soporta múltiples plataformas : Swoole, Workerman, RoadRunner, PHP-PM, ngx_php.
Swoole
Instala la extensión Swoole en tu sistema (linux) o en tu imagen Docker :
#!/bin/bash
pecl install swoole
Ejecute Ubiquity Swoole (por primera vez, se instalará el paquete ubiquity-swoole):
Ubiquity serve -t=swoole
Configuración del servidor
<?php
return array(
"host" => "0.0.0.0",
"port" => 8080,
"options"=>[
"worker_num" => \swoole_cpu_num() * 2,
"reactor_num" => \swoole_cpu_num() * 2
]
);
El puerto también puede cambiarse al iniciar el servidor:
Ubiquity serve -t=swoole -p=8999
Optimización de los servicios
El inicio de los servicios se realizará una sola vez, al arrancar el servidor.
\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();
});
- El método warmUpControllers:
instanciar los controladores
realiza la inyección de dependencias
prepara la llamada de los métodos initialize y finalize (inicialización de las constantes de llamada)
Al inicio de cada Worker, el método warmup de los controladores puede, por ejemplo, inicializar consultas DAO preparadas:
public static function warmup() {
self::$oneFooDao = new DAOPreparedQueryById('models\\Foo');
self::$allFooDao = new DAOPreparedQueryAll('models\\Foo');
}
Workerman
Workerman no requiere ninguna instalación especial (excepto libevent para ser utilizado en producción por razones de rendimiento).
Ejecute Ubiquity Workerman (por primera vez, se instalará el paquete ubiquity-workerman):
Ubiquity serve -t=workerman
Configuración del servidor
<?php
return array(
"host" => "0.0.0.0",
"port" => 8080,
"socket"=>[
"count" => 4,
"reuseport" =>true
]
);
El puerto también puede cambiarse al iniciar el servidor:
Ubiquity serve -t=workerman -p=8999
Optimización de los servicios
El inicio de los servicios se realizará una sola vez, al arrancar el servidor.
\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