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

398
Views
Realiza una solicitud HTTP sin esperar la respuesta utilizando el Cliente HTTP de Symfony

¿Es posible enviar una solicitud usando Symfony HTTP Client sin esperar la respuesta?

En mi caso de uso, algunas solicitudes a mi aplicación deberían notificar a un servicio de terceros. La respuesta de ese servicio es irrelevante, y la notificación tampoco es crucial. No importa si falla debido a un tiempo de espera o algo similar. Pero estas solicitudes no deberían retrasar la respuesta de mi aplicación. Quiero "disparar y olvidar".

Utilizo la siguiente acción del controlador para experimentar:

 class MyController extends AbstractController { #[Route('/', name: 'test', methods: ['GET'])] public function fireAndForget(HttpClientInterface $http): Response { $res = $http->request( 'POST', 'https://httpstat.us/201?sleep=5000', ['json' => ['x' => 'y']] ); return new Response('done'); } }

Usando el depurador, puedo pasar inmediatamente a la return después de la solicitud. Pero la respuesta no se devuelve antes de que se haya completado la solicitud.

Estoy usando Symfony 6.0 y tengo extensiones curl instaladas, por lo que Symfony HTTP Client usa CurlHttpClient bajo el capó.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Si realmente no está interesado en la respuesta durante el ciclo de vida de la solicitud entrante, será mejor que desacople la solicitud HTTP saliente y no la realice durante la solicitud. Simplemente guárdelo en algún tipo de cola de trabajo y procéselo más tarde.

Cualquier llamada HTTP se bloqueará en algún momento, por lo que también puede llevarla a otro lugar. Y eso sin tener en cuenta las respuestas de error, lo que también podría ocurrir y provocaría problemas como el cliente HTTP de Symfony, al que no le gusta mucho recibir respuestas en el rango 300-599.

Al final, si las solicitudes salientes no son relevantes para la respuesta y no deberían "retrasar la respuesta de su aplicación", simplemente no deberían ejecutarse allí. Llámalos a otro lugar.

El desacoplamiento a través de algún tipo de cola de mensajes (ya sea utilizando un paquete de cola completo como Symfony Messenger, o simplemente almacenando las "tareas" en cualquier otro lugar y haciendo que un script las revise y las marque como terminadas) sería la forma más razonable de hacerlo.


Cualquier solicitud que realice será atendida. Puede modificar el tiempo de espera llamando a withOptions() en el cliente HTTP, para esperar muy poco tiempo antes de que se agote el tiempo de espera... pero aún esperaría ese "muy poco tiempo".

Y también necesitaría manejar la excepción cuando el cliente agote el tiempo de espera (o siempre que haya una respuesta real que no sea 200). Terminas con "disparar y hacer bastante trabajo tratando de olvidar que en realidad hemos despedido". No vale la pena la molestia y, en cualquier caso, es un diseño deficiente.

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!