Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

475
Visualizações
¿Cómo hacer una salida php clásica () en swoole?

Por ejemplo este código

 <?php if (some_condition()) { header('Location: /'); exit(); } // do a lot of things...

En el código anterior PHP FPM clásico funciona bien. Pero en PHP+Swoole, obtenemos este error

 swoole exit {"exception":"[object] (Swoole\\ExitException(code: 0): swoole exit at

El error es comprensible. Pero, ¿cuál es la forma más fácil de migrarlo?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Para PHP FPM, cada fragmento de código se ejecutaba individualmente y el resultado (salida de ese proceso) se canalizaba de vuelta a un cliente. Entonces, cada vez que queríamos detener el procesamiento, simplemente activamos exit() .

Sin embargo, con Swoole , se espera que el servidor funcione todo el tiempo. Claro, es posible detener el proceso con Swoole\Process::exit(), pero generalmente depende del controlador activar el envío de la respuesta de inmediato. Por ejemplo:

 $server = new Swoole\HTTP\Server("127.0.0.1", 9501); $server->on("start", function (Swoole\Http\Server $server) { echo "Swoole http server is started at http://127.0.0.1:9501\n"; }); $server->on("request", function (Swoole\Http\Request $request, Swoole\Http\Response $response) { $response->header("Content-Type", "text/plain"); $response->end("Hello World\n"); }); $server->start();

En este caso, $response->end es el método que hace esencialmente lo mismo que exit() en el mundo PHP FPM. Tenga en cuenta que es bastante similar a lo que sucede en el mundo de Node: se espera que el servidor esté funcionando todo el tiempo, y son los controladores (funciones que procesan cada solicitud individual) los que deciden si dejar de manejar solicitudes individuales y devolver la respuesta, tanto encabezados como cuerpo.

over 4 years ago · Santiago Trujillo Relatório

0

Puede obtener información sobre \Swoole\ExitException .

 use Swoole\Coroutine; use function Swoole\Coroutine\run; function route() { controller(); } function controller() { your_code(); } function your_code() { Coroutine::sleep(.001); exit(1); } run(function () { try { route(); } catch (\Swoole\ExitException $e) { var_dump($e->getMessage()); var_dump($e->getStatus() === 1); var_dump($e->getFlags() === SWOOLE_EXIT_IN_COROUTINE); } });
over 4 years ago · Santiago Trujillo Relatório

0

Cómo reemplazar exit() en Laravel + Swoole

Sí, es una función exit() de muy mala práctica. Pero la propia aplicación Laravel arranca un código heredado. Entonces, por los costos asociados, es una mejor solución de esta manera.

  1. Haz una excepción renderizable
 class ExitException extends Exception implements Renderable { public function report() { return true; // dont report } public function render() { return ' '; // prevent 500 html dump error } }
  1. Reemplazar exit(); con
 // exit; throw new ExitException();

Esa excepción será manejada por el controlador de errores de su aplicación y enviará una cadena vacía como respuesta al controlador de solicitudes de Swoole.

Repito: NO ES UNA SOLUCIÓN ELEGANTE, solo evite cambiar una gran cantidad de código en la aplicación heredada.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda