Tengo una comprensión básica de cómo funciona HTTP . Entiendo que el cliente (navegador web) hace una solicitud y el servidor responde a la solicitud. Sin embargo, lo que no entiendo es cómo sabe un servidor web cuando el cliente realiza una solicitud.
Si alguien me llama, suena mi teléfono y me notifican. Del mismo modo, ¿cómo se notifica a un servidor web sobre la solicitud?
Respuestas:
Hay muchas capas en esto. Y lo más importante, muchos de ellos son intercambiables.
Por ejemplo, puede tener una red de cable coaxial, un ethernet o un Wi-Fi inactivo en el nivel físico. HTTP funciona además de todos ellos, pero cada uno de ellos tiene un manejo ligeramente diferente de la carga útil que se envía.
HTTP funciona sobre otro protocolo, llamado TCP, que a su vez se ejecuta más o menos sobre otro protocolo, llamado IP (hoy en día principalmente en dos variantes: IPv4 e IPv6).
Por lo que el servidor HTTP registra una dirección IP (como
184.38.45.1
, o más a menudo "cualquiera"), junto con un puerto TCP (80
siendo el valor por defecto para HTTP, pero en general todo de1
a65535
), con el sistema operativo. Ahora, el servidor HTTP le dice al sistema operativo que haga ping cuando lleguen datos (u otro mensaje). El sistema operativo sabe cuándo sucede eso, porque el controlador de la tarjeta de interfaz de red lo dice. Y el controlador de la NIC es informado por la propia NIC, que en realidad tiene su propio software para interpretar las señales eléctricas en el cable de red (o las señales inalámbricas en el aire, etc., se entiende).Nota al margen :
Si desea saber más acerca de cómo la NIC puede iniciar la comunicación con el controlador / sistema operativo, es posible que desee buscar información básica sobre las interrupciones de hardware, básicamente, se detiene todo lo que la CPU está haciendo actualmente y el flujo del programa cambia a una interrupción rutina de controlador: un código extremadamente simple que se encarga de notificar al sistema y luego devuelve inmediatamente el control a lo que estaba haciendo la CPU. De hecho, podría responder muchas preguntas sobre el funcionamiento interno del sistema operativo y la computadora en sí, como cómo un sistema operativo puede "robar" la CPU de las aplicaciones en ejecución y mezclar los recursos de la CPU entre diferentes aplicaciones que se ejecutan al mismo tiempo, incluso si no cooperan.
De vuelta a los negocios:
En la analogía de su teléfono manual, imagine que su teléfono no suena realmente. Para saber si está intentando realizar una llamada telefónica, deberá mirar la pantalla periódicamente y verificar. Para que sea más fácil de administrar para el servidor HTTP (dado que ya hay bastantes capas que realizan esa verificación periódica), puede bloquear el intento de verificación.
Entonces, en lugar de verificar, ver que no hay nada allí y volver a verificar, básicamente sigue mirando la pantalla todo el tiempo. Sin embargo, básicamente tiene un sistema completamente separado para manejar esto (en su caso, el centro de audición, que verifica las vibraciones del aire para obtener información útil, el anillo), por lo que en realidad no requiere su atención (tiempo de CPU).
Esto se mejora aún más mediante técnicas que le permiten monitorear muchas conexiones a la vez (IOCP). Esto se acerca cada vez más al sistema de timbre del teléfono: tiene una habitación con diez mil teléfonos, pero solo le importan los que están sonando en este momento, los otros no le están prestando atención.
fuente
Las computadoras usan un concepto llamado "puertos", análogo a "extensiones" para una centralita telefónica: el cliente no solo "llama" a la dirección IP del servidor, sino que también envía la solicitud a un puerto específico en ese servidor.
Hay miles de puertos ( lista de wikipedia ), por ejemplo, el puerto 80 es el predeterminado para HTTP.
El truco es que un programa, por ejemplo, un servidor web, puede registrarse para escuchar en un puerto en particular. Luego, el sistema operativo pasará cualquier solicitud que ingrese en ese puerto a ese programa.
El punto de tener varios puertos es que puede tener múltiples servicios ejecutándose en el mismo servidor al mismo tiempo, al usar diferentes puertos no interferirán entre sí.
fuente
Servidor web notificado con el siguiente proceso
Digamos que el servidor web escucha en el puerto 80, cuando la solicitud del cliente llega al puerto 80, aceptará una conexión con la llamada del sistema accept (). Esta llamada generalmente se bloquea hasta que un cliente se conecta con el servidor.
Luego escuche las conexiones con la llamada al sistema listen () y vincule el zócalo a una dirección utilizando la llamada al sistema bind ().
Atlast crea un socket con la llamada al sistema socket ().
¡Espero que esto ayude!
fuente
Tiene el directorio / var / log / apache2 con el siguiente directorio:
Está relacionado con lo que desea del cliente y cómo notificar, sms, correo electrónico, etc.
Mi sugerencia:
Puede crear un servidor de registro y enviar todos sus registros, como el servidor de correo, el servidor dns, el servidor web, etc., luego puede analizarlo, incluso el mismo servidor usa db y puede ejecutar la consulta.
fuente
Supongo que el servidor web registra las funciones de devolución de llamada con el puerto.
De modo que cada vez que se recibe algo en ese puerto en particular, el sistema llama a esa función de devolución de llamada registrada anteriormente. Dentro de esa devolución de llamada, puede establecer un evento o algo así y luego el servidor web tendría un hilo dedicado esperando ese evento. Este hilo se ejecutará y pondrá en cola esta solicitud en la lista principal de solicitudes que el servidor web ya está procesando.
Lo que di aquí es una visión muy superficial y macro de las cosas que suceden. Para obtener respuestas más precisas, esperemos hasta que entren los expertos.
fuente