Unix Socket - Modelo Cliente Servidor
A maioria dos Aplicativos da Rede usa a arquitetura Cliente-Servidor, que se refere a dois processos ou dois aplicativos que se comunicam entre si para trocar algumas informações. Um dos dois processos atua como um processo cliente e outro processo atua como um servidor.
Processo do Cliente
Esse é o processo que normalmente faz uma solicitação de informações. Depois de obter a resposta, este processo pode ser encerrado ou pode fazer algum outro processamento.
Example, O navegador da Internet funciona como um aplicativo cliente, que envia uma solicitação ao servidor da Web para obter uma página da Web em HTML.
Processo do Servidor
Este é o processo que recebe uma solicitação dos clientes. Após obter uma solicitação do cliente, este processo executará o processamento necessário, reunirá as informações solicitadas e as enviará ao cliente solicitante. Feito isso, ele fica pronto para atender outro cliente. Os processos do servidor estão sempre alertas e prontos para atender às solicitações de entrada.
Example - O servidor Web continua esperando por solicitações de navegadores da Internet e, assim que recebe qualquer solicitação de um navegador, pega uma página HTML solicitada e a envia de volta para esse navegador.
Observe que o cliente precisa saber o endereço do servidor, mas o servidor não precisa saber o endereço ou mesmo a existência do cliente antes de a conexão ser estabelecida. Uma vez que a conexão é estabelecida, ambos os lados podem enviar e receber informações.
Arquiteturas de 2 e 3 camadas
Existem dois tipos de arquiteturas cliente-servidor -
2-tier architecture- Nesta arquitetura, o cliente interage diretamente com o servidor. Este tipo de arquitetura pode ter algumas falhas de segurança e problemas de desempenho. O Internet Explorer e o Web Server funcionam em uma arquitetura de duas camadas. Aqui, os problemas de segurança são resolvidos usando Secure Socket Layer (SSL).
3-tier architectures- Nesta arquitetura, mais um software fica entre o cliente e o servidor. Este software intermediário é denominado 'middleware'. Middleware são usados para realizar todas as verificações de segurança e balanceamento de carga em caso de carga pesada. Um middleware pega todas as solicitações do cliente e, após realizar a autenticação necessária, ele passa essa solicitação para o servidor. Em seguida, o servidor faz o processamento necessário e envia a resposta de volta ao middleware e, finalmente, o middleware passa essa resposta de volta ao cliente. Se você deseja implementar uma arquitetura de 3 camadas, pode manter qualquer middleware, como o Web Logic ou o software WebSphere, entre o servidor da web e o navegador da web.
Tipos de servidor
Existem dois tipos de servidores que você pode ter -
Iterative Server- Esta é a forma mais simples de servidor em que um processo servidor atende a um cliente e, após completar a primeira solicitação, recebe a solicitação de outro cliente. Enquanto isso, outro cliente continua esperando.
Concurrent Servers- Este tipo de servidor executa vários processos simultâneos para atender a muitas solicitações de uma vez, porque um processo pode demorar mais e outro cliente não pode esperar por tanto tempo. A maneira mais simples de escrever um servidor concorrente no Unix é bifurcar um processo filho para lidar com cada cliente separadamente.
Como Fazer Cliente
As chamadas do sistema para estabelecer uma conexão são um pouco diferentes para o cliente e o servidor, mas ambos envolvem a construção básica de um soquete. Ambos os processos estabelecem seus próprios soquetes.
As etapas envolvidas no estabelecimento de um soquete no lado do cliente são as seguintes -
Crie um soquete com o socket() chamada de sistema.
Conecte o soquete ao endereço do servidor usando o connect() chamada de sistema.
Envie e receba dados. Existem várias maneiras de fazer isso, mas a maneira mais simples é usar oread() e write() chamadas de sistema.
Como fazer um servidor
As etapas envolvidas no estabelecimento de um soquete no lado do servidor são as seguintes -
Crie um soquete com o socket() chamada de sistema.
Vincule o soquete a um endereço usando o bind()chamada de sistema. Para um soquete de servidor na Internet, um endereço consiste em um número de porta na máquina host.
Ouça as conexões com o listen() chamada de sistema.
Aceite uma conexão com o accept()chamada de sistema. Essa chamada normalmente bloqueia a conexão até que um cliente se conecte ao servidor.
Envie e receba dados usando o read() e write() chamadas de sistema.
Interação cliente e servidor
A seguir está o diagrama que mostra a interação completa entre cliente e servidor -