envía dos solicitudes ajax al mismo tiempo en Symfony

Cuando envío dos solicitudes ajax juntas usando JQuery … la respuesta se unen

por ejemplo

$.ajax ({ type: "POST", url: 'ajax.php' }); $.ajax ({ type: "POST", url: 'ajax2.php' }); 

ajax.php, ajax2.php son dos archivos que contienen un maniquí para tomar un ciclo de aproximadamente 5 segundos.

FireBug Screen

POST localhost / ajax.php 200 OK 4.77s
POST localhost / ajax.php 200 OK 4.37s

Aquí cada solicitud toma alrededor de 5 segundos para ser ejecutada …

Cuando hago el mismo ejemplo en Symfony tengo un resultado diferente

 $.ajax ({ type: "POST", url: 'module/action1' }); $.ajax ({ type: "POST", url: 'module/action2' }); 

action1, action2 son dos acciones solo contienen un dummy para que el loop tome aproximadamente 5 segundos.

FireBug Screen

POST localhost / web / frontend_dev.php / module / action1 200 OK 4.47s

POST localhost / web / frontend_dev.php / module / action2 200 OK 9.87s

Tenga en cuenta que la segunda solicitud ejecutada después de la primera finalizó, no sé por qué sucedió eso

Cuando llega una solicitud e intenta iniciar una sesión, php verifica si la misma sesión está en uso en ese momento. Si es así, la nueva solicitud debe esperar hasta que la otra solicitud finalice o libere el locking de la sesión.

Su caso es el siguiente:

  • llega la primera solicitud, sesión de locking
  • llega segundo mensaje, intenta bloquear la sesión, tiene que esperar
  • [5 sec dormir]
  • la primera solicitud finaliza, libera el locking
  • Comienza la segunda solicitud, logra locking de sesión
  • [5 sec dormir]
  • segunda solicitud finaliza

De manera predeterminada, Symfony inicia la sesión al comienzo de cada solicitud.

En PHP puro, puede liberar el locking del archivo de sesión con session_write_close() . Symfony tiene la clase sfUser que envuelve la funcionalidad de la sesión, deberás llamar al método shutdown() .

Tenga en cuenta que si modifica los datos de la sesión más adelante en esa solicitud, no se guardará.

Para una explicación más detallada, lea el locking de escritura de la sesión PHP y cómo tratarlo en Symfony .

Posiblemente Symfony hace algo para ajax peticiones. ¿Qué pasa si intentas:

 $.ajax ({ type: "POST", url: 'module/action1', async: true }); $.ajax ({ type: "POST", url: 'module/action2', async: true }); 

?