Unix Socket - Modelo cliente-servidor
La mayoría de las aplicaciones de red utilizan la arquitectura Cliente-Servidor, que se refiere a dos procesos o dos aplicaciones que se comunican entre sí para intercambiar información. Uno de los dos procesos actúa como un proceso cliente y otro proceso actúa como un servidor.
Proceso del cliente
Este es el proceso, que normalmente realiza una solicitud de información. Después de obtener la respuesta, este proceso puede terminar o puede realizar algún otro procesamiento.
Example, El navegador de Internet funciona como una aplicación cliente, que envía una solicitud al servidor web para obtener una página web HTML.
Proceso del servidor
Este es el proceso que toma una solicitud de los clientes. Después de recibir una solicitud del cliente, este proceso realizará el procesamiento requerido, recopilará la información solicitada y la enviará al cliente solicitante. Una vez hecho esto, está listo para servir a otro cliente. Los procesos del servidor siempre están alertas y listos para atender las solicitudes entrantes.
Example - El servidor web sigue esperando las solicitudes de los navegadores de Internet y, tan pronto como recibe alguna solicitud de un navegador, recoge una página HTML solicitada y la envía de vuelta a ese navegador.
Tenga en cuenta que el cliente necesita saber la dirección del servidor, pero el servidor no necesita saber la dirección o incluso la existencia del cliente antes de que se establezca la conexión. Una vez que se establece una conexión, ambas partes pueden enviar y recibir información.
Arquitecturas de 2 y 3 niveles
Hay dos tipos de arquitecturas cliente-servidor:
2-tier architecture- En esta arquitectura, el cliente interactúa directamente con el servidor. Este tipo de arquitectura puede tener algunos agujeros de seguridad y problemas de rendimiento. Internet Explorer y Web Server funcionan en una arquitectura de dos niveles. Aquí los problemas de seguridad se resuelven utilizando Secure Socket Layer (SSL).
3-tier architectures- En esta arquitectura, un software más se encuentra entre el cliente y el servidor. Este software intermedio se llama 'middleware'. El middleware se utiliza para realizar todas las comprobaciones de seguridad y el equilibrio de carga en caso de carga pesada. Un middleware toma todas las solicitudes del cliente y, después de realizar la autenticación requerida, pasa esa solicitud al servidor. Luego, el servidor realiza el procesamiento requerido y envía la respuesta al middleware y finalmente el middleware devuelve esta respuesta al cliente. Si desea implementar una arquitectura de 3 niveles, puede mantener cualquier middleware como Web Logic o software WebSphere entre su servidor web y su navegador web.
Tipos de servidor
Hay dos tipos de servidores que puede tener:
Iterative Server- Esta es la forma más simple de servidor donde un proceso de servidor atiende a un cliente y después de completar la primera solicitud, toma la solicitud de otro cliente. Mientras tanto, otro cliente sigue esperando.
Concurrent Servers- Este tipo de servidor ejecuta varios procesos simultáneos para atender muchas solicitudes a la vez porque un proceso puede tardar más y otro cliente no puede esperar tanto. La forma más sencilla de escribir un servidor concurrente en Unix es bifurcar un proceso hijo para manejar cada cliente por separado.
Cómo hacer cliente
Las llamadas del sistema para establecer una conexión son algo diferentes para el cliente y el servidor, pero ambas involucran la construcción básica de un socket. Ambos procesos establecen sus propios sockets.
Los pasos necesarios para establecer un socket en el lado del cliente son los siguientes:
Cree un enchufe con el socket() llamada al sistema.
Conecte el enchufe a la dirección del servidor utilizando el connect() llamada al sistema.
Envía y recibe datos. Hay varias formas de hacer esto, pero la forma más sencilla es utilizar elread() y write() llamadas al sistema.
Cómo hacer un servidor
Los pasos necesarios para establecer un socket en el lado del servidor son los siguientes:
Cree un enchufe con el socket() llamada al sistema.
Vincular el socket a una dirección usando el bind()llamada al sistema. Para un socket de servidor en Internet, una dirección consta de un número de puerto en la máquina host.
Escuche las conexiones con el listen() llamada al sistema.
Acepta una conexión con el accept()llamada al sistema. Esta llamada normalmente bloquea la conexión hasta que un cliente se conecta con el servidor.
Envíe y reciba datos utilizando el read() y write() llamadas al sistema.
Interacción cliente y servidor
A continuación se muestra el diagrama que muestra la interacción completa entre el cliente y el servidor: