/sistemadistribuido

materia de sistema distribuido

Primary LanguagePython

iniciar o virtual venv: cd djangogirls source myvenv/bin/activate

para iniciar o servidor: python manage.py runserver 0.0.0.0:8080

Comunicação cliente-servidor e sincronização: Desenvolver um servidor para sincronização de relógios e um cliente para utilizar este servidor. A cada vez que o cliente desejar sincronizar seu relógio com o servidor deverá primeiro verificar o tempo de tráfego das mensagens entre ambos. Isto será feito com entre o cliente e o servidor executando uma troca de mensagens para verificar o RTT (Round Trip Time) entre ambos;

RTT O cliente envia uma mensagem para o servidor inserindo o timestamp (tempo atual de seu relógio) – ts1; O servidor verifica o seu timestamp ao receber a mensagem – ts2; O servidor envia um mensagem de resposta para o cliente inserindo os timestamps já verificados e o timestamp do envio – ts3; O cliente ao receber a mensagem do servidor verifica o seu timestamp – ts4; O cliente calcula o tempo médio de tráfego de mensagens com o servidor por: ((ts4 – ts1) – (ts3 – ts2)) / 2; O RTT é verificado 5 vezes e calculada uma média;

O cliente envia mensagem solicitando a hora do relógio do servidor;

O servidor verifica sua hora local e responde ao cliente com esta informação; O cliente atualiza seu relógio com a hora informada pelo servidor somada ao tempo de comunicação verifica antes pelo RTT.

Os programas devem ser feitos em Python, utilizando sockets e comunicação via UDP.

execultando:

Para fazer o teste é preciso excultar dois terminais e em cada um dele colocar os comandos a seguir:

  • terminal 1:

$ python servidor.py

  • terminal 2:

$ python cliente.py

o servidor deverá exibir: (em construção)

Ouvindo... ('127.0.0.1', 8081)

Quando receber a mensagem exibirá o tempo inicial

vai processar algo, no momento é um seep.

Irá responder para o cliente com o tempo gasto.

o cliente deverá exibir: (em construção)

Melhoramentos futuros:

  • Colocar controle para perda de pacote.

#import socket HOST = '0.0.0.0' # Endereco IP do Servidor PORT = 8082 # Porta que so cliente udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print 'Resposta do servidor\n' orig = (HOST, PORT) udp.bind(orig) while True: msg, cliente = udp.recvfrom(1024) print cliente, msg #tempo que a mensagem chega no servidor recv_time_ms = datetime.now() udp.close()

#rtt_in_ms = round(recv_time_ms - send_time_ms, 3) #now = datetime.now()

sudo apt-get install openmpi-bin openmpi-common openmpi-dev openmpi-libs0 libmpich1.0c2 libmpich-mpd1.0c2 mpich-bin mpich-mpd-bin mpi-doc

Trabalho final

fazer a sincronização da hora via RPC

para isso estou usando o arquivo cerv.py como servidor da aplicação. e o arquivo fient.py como cliente que quer atualizar a hora.