remove - Solicitudes simultáneas para PHP Script
strip_tags wordpress (4)
Si PHP Engine ya está en el medio de ejecutar un script en el servidor, ¿qué pasaría con otras solicitudes de navegador simultáneas al mismo script?
- ¿Las solicitudes estarán en cola?
- ¿Serán ignorados?
- ¿Cada solicitud tendrá su propia instancia de script?
- Cualquier otra posibilidad?
A menos que esté ejecutando una configuración muy no estándar, su servidor web (Apache, IIS, nginx, etc.) tendrá múltiples procesos que ejecutan PHP por separado para cada solicitud que ingrese al servidor. Las solicitudes simultáneas serán atendidas simultáneamente.
Acabo de toparme con esto yo mismo. Básicamente, debe llamar a session_write_close()
para evitar el bloqueo de un solo usuario. Asegúrese de que una vez que llame a session_write_close()
no intente y modifique ninguna variable de sesión. Una vez que lo llame, trate las sesiones como de solo lectura a partir de ese momento.
Si 2 clientes llaman al servidor al mismo tiempo, es probable que el servidor pueda responder a ambos clientes casi simultáneamente. Los clientes aquí los defino a nivel de navegador.
Es decir que en la misma máquina, si está utilizando 2 navegadores para cargar el mismo sitio web / página al mismo tiempo, ambos deben cargarse al mismo tiempo.
sin embargo, dado que estamos hablando de PHP, debe tomar notas especiales sobre las sesiones. Si sus páginas usan sesiones, el servidor solo sirve una página a la vez. Esto se debe a que el archivo de sesión se bloqueará, hasta que salga una secuencia de comandos.
Mira este ejemplo. Los 2 archivos se cargan desde la misma sesión, también conocido como el mismo usuario del navegador.
scripta.php requested scripta.php served
------+---+---------------------------------+------------------------>
scripta.php started
scriptb.php requested scriptb.php started
---------------+-------------------------------+-----------------+--->
scriptb.php served.
Tenga en cuenta que scriptb.php solo se inicia después de que se sirva scripta.php. Esto se debe a que cuando se inició scripta.php, el archivo de sesión se bloquea a otras secuencias de comandos para que scripta.php pueda escribir en el archivo de la sesión. Cuando se completa scripta.php, el archivo de sesión se desbloquea y, por lo tanto, otros scripts pueden usarlo. Por lo tanto, scriptb.php esperará hasta que se libere el archivo de sesión, luego bloqueará el archivo de sesión y lo usará.
Este proceso se repetirá para evitar que las secuencias de comandos múltiples que escriben en el mismo archivo de sesión causen demoras. Por lo tanto, se recomienda llamar a session_write_close
() cuando ya no esté utilizando la sesión, especialmente en un sitio web que usa muchos iframes o AJAX.
El servidor, dependiendo de su configuración, generalmente puede atender cientos de solicitudes al mismo tiempo ; si utiliza Apache, la opción de configuración de MaxClients
es la que dice:
La directiva
MaxClients
establece el límite de la cantidad de solicitudes simultáneas que se atenderán.
Cualquier intento de conexión sobre el límite deMaxClients
normalmente se pondrá en cola, hasta un número basado en la directiva ListenBacklog.
Una vez que se libera un proceso secundario al final de una solicitud diferente, la conexión se revisará.
El hecho de que dos clientes soliciten la misma página no es un problema.
Asi que :
¿Las solicitudes estarán en cola?
No ; excepto si :
- hay algo de bloqueo en alguna parte, lo que puede ocurrir, por ejemplo, si las dos solicitudes provienen del mismo cliente, y está utilizando sesiones basadas en archivos en PHP : mientras se ejecuta un script, la sesión está "bloqueada", lo cual significa que el servidor / cliente tendrá que esperar hasta que finalice la primera solicitud (y el archivo desbloqueado ) para poder usar el archivo para abrir la sesión para el segundo usuario.
- las solicitudes provienen del mismo cliente Y del mismo navegador; la mayoría de los navegadores pondrán en cola las solicitudes en este caso, incluso cuando no haya nada en el servidor que produzca este comportamiento.
- hay más de los
MaxClients
actualmente activos deMaxClients
- vea la cita del manual de Apache justo antes.
¿Serán ignorados?
No: esto significa que solo un usuario puede usar un sitio web al mismo tiempo; esto no sería muy agradable, ¿verdad?
Si fuera el caso, no podría publicar esta respuesta, si usted estaba presionando F5 en el mismo momento para ver si alguien respondía.
(Bueno, SO no está en PHP, pero los principios son los mismos)
Cualquier otra posibilidad?
Sí ^^
edite después de editar el OP y el comentario:
¿Cada solicitud tendrá su propia instancia de script?
No existe tal cosa como " instancia de script ": en pocas palabras, lo que sucede cuando se realiza una solicitud a un script es:
- el servidor web bifurca otro proceso para gestionar la solicitud (a menudo, por motivos de rendimiento, esas bifurcaciones se realizan con antelación, pero esto no cambia nada)
- el proceso lee el script PHP desde el disco
- varios procesos pueden hacer esto al mismo tiempo : no hay bloqueo en la lectura del archivo
- el archivo se carga en la memoria; en un bloque de memoria distinto para cada proceso
- el archivo PHP en la memoria está " compilado " en los códigos de operación, todavía en la memoria
- esos códigos de operación se ejecutan, aún desde el bloque de memoria que pertenece al proceso que responde a su solicitud
En realidad, puede hacer que dos usuarios envíen una solicitud al mismo script PHP (o a distintos scripts PHP que incluyan el mismo archivo PHP) ; eso definitivamente no es un problema, ¡o ninguno del sitio web en el que trabajé funcionaría!