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

.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
        ]
);

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.

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();
});
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:

app/controllers/FooController.php
     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

.ubiquity/workerman-config.php
<?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.

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