paint-brush
Um guia essencial para programação de soquete em Python: bibliotecas cliente, servidor e ponto a pontopor@pubnub
4,574 leituras
4,574 leituras

Um guia essencial para programação de soquete em Python: bibliotecas cliente, servidor e ponto a ponto

por PubNub5m2023/03/06
Read on Terminal Reader

Muito longo; Para ler

Neste tutorial, você aprenderá como trocar dados entre um cliente e um servidor usando a programação de soquete Python e a API Socket. O código-fonte usado neste tutorial pode ser encontrado no [repositório GitHub]: https://github.com/PubNubDevelopers/python-socket-demo.
featured image - Um guia essencial para programação de soquete em Python: bibliotecas cliente, servidor e ponto a ponto
PubNub HackerNoon profile picture
0-item

Neste tutorial, você aprenderá como trocar dados entre um cliente e um servidor usando a programação de soquete Python e a API Socket. Posteriormente, este tutorial discutirá a troca de dados diretamente entre dois ou mais clientes Python usando um provedor hospedado. O código-fonte usado neste tutorial pode ser encontrado no repositório GitHub .


A programação de soquete conecta dois soquetes (um soquete de cliente e um soquete de servidor) e permite que eles se comuniquem bidirecionalmente em tempo real. As conexões de soquete diretas podem beneficiar todos os aplicativos em tempo real, pois os dados podem ser enviados ou recebidos a qualquer momento.

Ambiente configurado

Você precisará de uma versão estável do Python versão 3.x instalada em sua máquina. Se você for um usuário do Windows, terá a opção de adicionar Python ao seu PATH.


Você também precisará de um editor de código para acompanhar este tutorial.


O Visual Studio Code é um popular editor de código aberto e gratuito que oferece suporte a várias linguagens e estruturas, incluindo Python.


O VSCode também oferece suporte a extensões para Python para ajudar na conclusão e depuração do código.

Crie e execute um aplicativo de soquete Python

Vamos criar um aplicativo de soquete simples usando Python. O Python fornece uma classe de soquete nativa (módulo de soquete), para que os desenvolvedores não precisem depender de bibliotecas externas. Comece configurando o cliente e o servidor do soquete Python:


Pilha de soquete Python


Crie o arquivo client.py no diretório do projeto. Para usar soquetes, importe a biblioteca de soquete Python e crie um novo objeto de soquete que se conecte a um endereço IP especificado (neste caso, localhost na porta número 8080, mas você pode selecionar qualquer endereço ipv4).


Crie uma nova conexão com o servidor de soquete, envie dados para o servidor TCP e feche a conexão de soquete.


Seu arquivo client.py deve ficar assim:


 import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('0.0.0.0', 8080)) client.send("I am CLIENT\n".encode()) from_server = client.recv(4096) client.close() print (from_server.decode())


Você precisará de um servidor de soquete para ouvir conexões e mensagens recebidas de seu cliente.


Crie o arquivo server.py e adicione o seguinte conteúdo:


 import socket serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serv.bind(('0.0.0.0', 8080)) serv.listen(5) while True: conn, addr = serv.accept() from_client = '' while True: data = conn.recv(4096) if not data: break from_client += data.decode('utf8') print (from_client) conn.send("I am SERVER\n".encode()) conn.close() print ('client disconnected and shutdown')


Server.py vincula o objeto de soquete ao nome do host (localhost) na porta 8080 e escuta continuamente novas conexões de cliente. Quando um cliente se conecta a esse endereço, o servidor aceita a conexão e lê todos os dados.


Depois que os dados são lidos com sucesso do cliente, o servidor fornece uma resposta de dados, momento em que o cliente encerra a conexão.


Para testar você mesmo, abra duas janelas de terminal simultaneamente. Em uma janela, execute:


 python3 server.py


Na segunda janela execute:


 python3 client.py


Observe que o servidor continua em execução e estabelecerá uma nova conexão toda vez que você executar o cliente e anexar qualquer nova saída.


O cliente enviará a string "I am CLIENT" para o servidor e aguardará uma resposta. O servidor lerá a mensagem do cliente, enviará para o terminal e enviará uma resposta ao cliente.


Exemplo de soquete do Python

Programação de soquete em Python usando PubNub

Até agora, este tutorial abordou a troca de mensagens entre um servidor e um cliente, mas e se você precisar se comunicar diretamente entre clientes Python?


Enviar dados diretamente entre dois ou mais dispositivos cliente é complicado porque você se depara com muitas considerações de dimensionamento e segurança à medida que o número de dispositivos aumenta.


Uma arquitetura cliente-servidor é usada para moderar e gerenciar sua comunicação cliente-cliente. Se você não possui um servidor web ou se preocupa com o dimensionamento do servidor para atender às demandas de seu aplicativo, deve optar por uma solução de comunicação em tempo real hospedada, como o PubNub .


Os SDKs de plataforma cruzada do PubNub, incluindo Python , podem identificar usuários e enviar mensagens para canais específicos, que apenas clientes inscritos receberão.

Programação de soquete Python de cliente para cliente

Então, como o aplicativo simples apresentado anteriormente seria escrito com o PubNub para trocar mensagens diretamente entre dois clientes? É essencial entender que, embora o PubNub use a arquitetura 'publish' e 'subscribe' (pub/sub) para enviar e receber mensagens bidirecionais entre endpoints, ele ainda usa sockets nos bastidores. O PubNub oferece os benefícios da comunicação por soquete sem se preocupar com os detalhes da programação de rede Python e mantendo uma conexão sempre ativa entre seus clientes, independentemente do sistema operacional.


Para integrar o PubNub ao projeto, instale o pacote PubNub com pip no terminal; isso permitirá que você use o PubNub Python SDK e se comunique com a infraestrutura do PubNub.


 pip3 install 'pubnub>=7.1.0'


Você precisará criar dois clientes para se conectar e se comunicar pela rede PubNub. Crie um arquivo pn_client_1.py e adicione o seguinte código:


 from pubnub.callbacks import SubscribeCallback from pubnub.enums import PNStatusCategory from pubnub.pnconfiguration import PNConfiguration from pubnub.pubnub import PubNub import time import os pnconfig = PNConfiguration() userId = os.path.basename(__file__) pnconfig.publish_key = 'demo' pnconfig.subscribe_key = 'demo' pnconfig.user_id = userId pnconfig.ssl = True pubnub = PubNub(pnconfig) def my_publish_callback(envelope, status): # Check whether request successfully completed or not if not status.is_error(): pass class MySubscribeCallback(SubscribeCallback): def presence(self, pubnub, presence): pass def status(self, pubnub, status): pass def message(self, pubnub, message): if message.publisher == userId : return print ("from device " + message.publisher + ": " + message.message) pubnub.add_listener(MySubscribeCallback()) pubnub.subscribe().channels("chan-1").execute() ## publish a message while True: msg = input("") if msg == 'exit': os._exit(1) pubnub.publish().channel("chan-1").message(str(msg)).pn_async(my_publish_callback)


Crie o arquivo pn_client_2.py e adicione o mesmo código usado para pn_client_1.py

O código acima usa chaves 'demo', mas você pode obter suas chaves PubNub personalizadas gratuitamente.


Execute pn_client_1.py e pn_client_2.py simultaneamente em duas janelas de terminal diferentes


 python3 pn_client_1.py


 python3 pn_client_2.py


Cada cliente inicializa sua conexão com a rede PubNub e se inscreve para receber novas mensagens sempre que forem publicadas no canal chan-1 . Você pode pensar nisso como enviar dados por um soquete TCP em Python; nos bastidores, o PubNub está criando e gerenciando o soquete para você e roteando sua mensagem para todos os clientes que a estão ouvindo. Depois que o cliente remoto recebe a mensagem, a mensagem recebida é exibida na linha de comando.


Exemplo de Python PubNub


E isso é tudo! Para obter mais informações sobre como desenvolver com o PubNub, confira nossa variedade de tutoriais . Como alternativa, confira o tour interativo ao vivo do PubNub para entender como a plataforma fornece interatividade em tempo real para aplicativos. PubNub suporta comunicação de datagrama TCP e UDP, bem como Linux, Unix e Windows.


Também publicado aqui: https://www.pubnub.com/blog/socket-programming-in-python-client-server-p2p/