Uploaded by Nuno Vidal

Goncalo CheatSheet

advertisement
COMPUTAÇÃO DISTRIBUIDA
CHEATSHEET (PYTHON)
Última atualização a 15/01/2020
Esperar por ligação, criando nova socket qnd há uma
(clientsocket, address) = serversocket.accept()
Por defeito as sockets estão em modo de bloqueio.
clientsocket.setBlocking(1)
Sockets
https://docs.python.org/3/library/socket.html
import socket
Estabelecem a comunicação entre dois processos,
na mesma ou em máquinas diferentes.
Podem ser distinguidas em dois grandes grupos, as
sockets do cliente, que atuam como extremo da
comunicação e as sockets do servidor, que
funcionam como operadores de distribuição.
As trocas de mensagens são realizadas utilizando os protocolos
UDP ou TCP.
Uma socket em modo non-blocking (0) caso numa chamada à função
recv() não receba nenhuma informação ou send() não consiga
enviar, gera um erro. Em modo de bloqueio (1), nestes cenários
a socket bloqueia até que hajam condições para executar as
funções referidas.
JSON
https://docs.python.org/3/library/json.html
import json
Objeto em JSON é dicionário em Python e array em
JSON é array em Python.
Selectors
https://docs.python.org/3/library/selectors.html
import selectors
Permitem multiplexagem1 de I/O eficiente.
CONSTANTES
EVENT_READ
EVENT_WRITE
Criar seletor
sel = selectors.DefaultSelector()
Executar uma função quando um evento ocorre numa socket.
sel.register(<socket>, <event>, <function>)
Converte dados em python para string JSON
Cliente
Criação da socket, indicando família e protocolo
s = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
Conexão ao servidor, na porta 80
s.connect(("www.python.org", 80))
Receção e envio de dados para o servidor
s.recv(<int-maxBytes>)/sendall(<bytes-data>)
A informação é trocada na forma de bytes, pelo que as operações
de encode() e decode() são fundamentais.
Sob strings, por defeito a codificação é feita em ‘utf-8’, que
pode ser passado como argumento das funções referidas.
Servidor
serversocket = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
json.dumps(<pythonObject>)
Converte string JSON para dados em Python
json.loads(<string>)
while True:
Bloqueia processo até que ocorra um evento
events = sel.select()
for key, mask in events:
key.data é a função definida como terceiro parâmetro no register
callback = key.data
file.obj é o primeiro parâmetro no register.
A mask não importa agora.
callback(key.fileobj, mask)
Com os selectors, conseguimos fazer do seervidor
um mero intermediário, responsável por criar
sockets de cliente em resposta a um pedido de uma
socket de cliente, não tendo qualquer papel na
troca de dados entre o cliente e o servidor.
Definir endereço da socket e respetiva porta
serversocket.bind((socket.gethostname(), 80))
Definir fila de espera de ligações (número de ligações acumuladas
em espera antes de começar a recusar novas ligações)
serversocket.listen(5)
Com a socket (“servidor”) configurada, podemos entrar no main loop
while True:
1 Técnica que permite trocar várias mensagens de
origens ou destinos diferentes numa única via.
Gonçalo Matos, 92972, LEI
Download