Configurar um servidor da Internet em Python usando soquete

Como complemento ao tutorial do cliente de rede, este tutorial mostra como implementar um servidor Web simples em Pitão. Para ter certeza, isso não substitui o Apache ou o Zope. Também existem maneiras mais robustas de implementar serviços da Web em Python, usando módulos como BaseHTTPServer. Este servidor usa o módulo de soquete exclusivamente.

Você deve se lembrar que o módulo de soquete é a espinha dorsal da maioria dos módulos de serviço da web Python. Como no cliente de rede simples, a criação de um servidor com ele ilustra os conceitos básicos de serviços da Web em Python de forma transparente. O próprio BaseHTTPServer importa o módulo de soquete para afetar um servidor.

A título de revisão, todas as transações de rede acontecem entre clientes e servidores. Na maioria dos protocolos, os clientes solicitam um determinado endereço e recebem dados.

Dentro de cada endereço, vários servidores podem ser executados. O limite está no hardware. Com hardware suficiente (RAM, velocidade do processador, etc.), o mesmo computador pode servir como servidor Web, servidor FTP e

instagram viewer
servidor de e-mail (pop, smtp, imap ou todos os itens acima), tudo ao mesmo tempo. Cada serviço está associado a uma porta. A porta está vinculada a um soquete. O servidor escuta sua porta associada e fornece informações quando solicitações são recebidas nessa porta.

Portanto, para afetar uma conexão de rede, você precisa conhecer o host, a porta e as ações permitidas nessa porta. A maioria dos servidores web é executada na porta 80. No entanto, para evitar conflitos com um servidor Apache instalado, nosso servidor web será executado na porta 8080. Para evitar conflitos com outros serviços, é melhor manter os serviços HTTP na porta 80 ou 8080. Estes são os dois mais comuns. Obviamente, se elas forem usadas, você deverá encontrar uma porta aberta e alertar os usuários sobre a alteração.

Como no cliente de rede, observe que esses endereços são os números de porta comuns para os diferentes serviços. Enquanto o cliente solicitar o serviço correto na porta certa no endereço certo, a comunicação ainda ocorrerá. Google o serviço de correio, por exemplo, não era executado inicialmente nos números de porta comuns, mas, como eles sabem acessar suas contas, os usuários ainda podem receber seus emails.

Diferente do cliente de rede, todas as variáveis ​​no servidor são conectadas. Qualquer serviço que se espera que seja executado constantemente não deve ter as variáveis ​​de sua lógica interna definidas na linha de comando. A única variação disso seria se, por algum motivo, você desejasse que o serviço fosse executado ocasionalmente e em vários números de porta. Se esse fosse o caso, no entanto, você ainda seria capaz de observar a hora do sistema e alterar as ligações adequadamente.

Como já mencionado, o servidor precisa conhecer o host ao qual está associado e a porta na qual escutar. Para nossos propósitos, aplicaremos o serviço a qualquer nome de host.

A porta, como mencionado anteriormente, será 8080. Portanto, observe que, se você usar este servidor em conjunto com o cliente de rede, precisará alterar o número da porta usada nesse programa.

Solicitar informações ou servi-las, a fim de acessar o Internet, precisamos criar um soquete. A sintaxe para esta chamada é a seguinte:

Os dois primeiros são obviamente protocolos da Internet. Qualquer coisa que viaja pela Internet pode ser acessada nessas famílias. Muitas redes ainda não são executadas no IPv6. Portanto, a menos que você saiba o contrário, é mais seguro usar o IPv4 como padrão e usar AF_INET.

De longe, os tipos mais comuns são SOCK_STEAM e SOCK_DGRAM porque funcionam nos dois protocolos do conjunto de IPs (TCP e UDP). Os três últimos são muito mais raros e, portanto, nem sempre podem ser suportados.

Depois de criar o soquete, precisamos definir as opções do soquete. Para qualquer objeto de soquete, você pode definir as opções de soquete usando o método setsockopt (). A sintaxe é a seguinte:

Se quisermos dar feedback à pessoa que liga para o servidor, agora podemos inserir um comando de impressão para confirmar que o servidor está em funcionamento.

Depois de configurar o servidor, agora precisamos informar Pitão o que fazer quando uma solicitação é feita na porta especificada. Para isso, referenciamos a solicitação por seu valor e a usamos como argumento de um loop while persistente.

Quando uma solicitação é feita, o servidor deve aceitar a solicitação e criar um objeto de arquivo para interagir com ela.

Nesse caso, o servidor usa a mesma porta para leitura e gravação. Portanto, o método makefile recebe um argumento 'rw'. O comprimento nulo do tamanho do buffer simplesmente deixa essa parte do arquivo para ser determinada dinamicamente.

A menos que desejemos criar um servidor de ação única, a próxima etapa é ler a entrada do objeto de arquivo. Quando fazemos isso, devemos ter o cuidado de eliminar essa entrada de excesso de espaço em branco.

A solicitação virá na forma de uma ação, seguida por uma página, o protocolo e a versão do protocolo em uso. Se alguém deseja servir uma página da Web, divide esta entrada para recuperar a página solicitada e, em seguida, lê essa página em uma variável que é gravada no objeto do arquivo de soquete. Uma função para ler um arquivo em um dicionário pode ser encontrada no blog.

Para tornar este tutorial um pouco mais ilustrativo do que se pode fazer com o módulo de soquete, renunciaremos a essa parte do servidor e, em vez disso, mostraremos como podemos nuances na apresentação de dados. Digite as próximas várias linhas no programa.

Se alguém estiver enviando uma página da web, a primeira linha é uma boa maneira de introduzir os dados em um navegador da web. Se for deixado de fora, a maioria dos navegadores da Web será padronizada para renderizar HTML. No entanto, se incluir, o 'OK' deve ser seguido por dois novos caracteres de linha. Eles são usados ​​para distinguir as informações do protocolo do conteúdo da página.

A sintaxe da primeira linha, como você provavelmente pode supor, é protocolo, versão do protocolo, número da mensagem e status. Se você já foi para uma página da Web que foi movida, provavelmente recebeu um erro 404. A mensagem 200 aqui é simplesmente a mensagem afirmativa.

O restante da saída é simplesmente uma página da Web dividida em várias linhas. Você notará que o servidor pode ser programado para usar dados do usuário na saída. A linha final reflete a solicitação da web conforme foi recebida pelo servidor.

Finalmente, como os atos de fechamento da solicitação, precisamos fechar o objeto de arquivo e o soquete do servidor.

Agora salve este programa com um nome reconhecível. Depois de chamá-lo com 'python program_name.py', se você programou uma mensagem para confirmar o serviço como sendo executado, isso deve ser impresso na tela. O terminal parecerá pausar. Tudo está como deveria estar. Abra seu navegador e vá para localhost: 8080. Você deve ver a saída dos comandos de gravação que fornecemos. Observe que, por uma questão de espaço, eu não implementei o tratamento de erros neste programa. No entanto, qualquer programa lançado no 'selvagem' deve.