Trabalho 1 - Sistemas Distribuídos

Data de entrega: 8/4

Esse é um exercício bem simples de cliente e servidor para vcs começarem a se familiarizar com a programação de sockets. Antes dessa data pretendo passar o segundo trabalho.

Descrição

Escrever um programa cliente-servidor em Lua, usando a biblioteca LuaSocket. O serviço oferecido é o download de uma string de 1K, que pode ser simplesmente descartado pelo cliente (mas tem que ser completamente lido). Depois de aberta a conexão, o servidor espera uma mensagem do cliente (que especificaria qual string ele deseja baixar, mas vcs podem usar sempre a mesma) e envia uma única resposta a esse pedido contendo a string requisitada. O programa deve ser escrito em duas versões

  1. O cliente e o servidor sempre fecham a conexão depois de completar a transferência da string.
  2. Cliente e servidor mantêm a conexão aberta, e o cliente pode requisitar a string novamente usando a mesma conexão. Nesse caso, somente quando o cliente fechar a conexão o servidor voltará a esperar por outros clientes.

Realize experimentos para comparar o comportamento das duas implementações. Varie o número de requisições realizadas pelo cliente dentro da conexão. Escreva um pequeno relatório (entregue em pdf, por favor) sobre os experimentos, contendo os números levantados.

O experimento deve considerar apenas um cliente e um servidor, com o objetivo de extrair o custo de abertura de conexões. (Estamos ignorando o fato de que outros eventuais clientes ficarão a espera do servidor ficar disponível.)

Obs: A função socket.gettime() retorna a hora corrente em segundos. Para essa medida fazer sentido, o tempo a ser medido deve ser grande, então trabalhe com números grandes de requisições. Outra coisa importante: ao medir tempo nunca deixe chamadas de entrada e saída dentro do trecho de código que vc está medindo.

Questões de Ordem

Bibliografia