PDA

Ver la versión completa : Pregunta de curiosidad



biyonder
25-11-2008, 10:13
Chicos una pregunta sobre redes, mas bien sobre sockets. Si un servidor web trabaja con el puerto 80, ¿como es que se pueden conectar dos ordenadores a la vez (o mas) al mismo puerto de la maquina?

hystd
25-11-2008, 12:08
Buena pregunta.

Un servidor puede atender múltiples peticiones porque puede implementar diferentes modos de planificación. Usando sockets no bloqueantes (no se espera hasta que se envía o recibe completamente el mensaje), puede crear una cola en la que se van añadiendo las peticiones, es decir, cuando un cliente envia una petición get(), por ejemplo tu navegador, dicho mensaje se pone en una cola (FIFO) que implementa el servidor a la espera de ser atendido. El único periodo de tiempo que el servidor queda "bloqueado" es durante la puesta en cola de dicha petición, que suele ser tener una cota superior de complejidad temporal de orden constante (0(1)). Cuando se tramita la petición, el servidor crea un socket auxiliar para la transferencia de los flujos de datos (send() y recv()). Cuando la transferencia finaliza (no hay más bytes que enviar o recibir), dicho socket se libera de memoria o se elimina.

Otra forma de verlo es, suponer que no tenemos un socket que entienda de colas... Por cada petición que llegue se crea un socket de este tipo, y al finalizar dicho socket se libera (el cliente ha finalizado la sesión).

Un saludo.