Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

466
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!