Universidade da Beira Interior Sistemas Paralelos e Distribuídos - 2007/2008 Curso: Matemática /Informática Sistemas Distribuídos - 2007/2008 Curso: Ensino da Informática Folha 7 - 1 → Multithreaded Servers 1 – Implemente o Servidor da data e hora do sistema estudado na aula teórica (“multithreaded server”). 2 – Modifique o programa anterior de modo a conseguir demonstrar experimentalmente que o servidor pode servir vários clientes em simultâneo. 3 – Construa uma aplicação cliente – servidor, com comunicação por Sockets TCP, que permita dois utilizadores manterem uma conversa em que as mensagens devem ser linhas de texto (Strings) introduzidas através dos respectivos teclados. A conversa deverá seguir o seguinte protocolo: . O utilizador do processo servidor é o primeiro a “falar”; . O utilizador do processo cliente decide quando termina a conversa enviando uma linha de texto com a palavra fim. Quando o utilizador do processo cliente termina a conversa, o processo cliente termina, mas o processo servidor deverá continuar a execução esperando que um novo cliente estabeleça ligação. 4 - Suponha agora que queremos, exactamente com o mesmo tipo de cliente, transformar o servidor do exercício anterior num servidor multithreaded que irá criar uma nova Thread para servir cada um dos clientes que se liga. Vários clientes poderão estar simultaneamente a comunicar com o mesmo servidor. O servidor não enviará um texto introduzido pelo teclado mas uma String armazenada num objecto do tipo java.util.Vector que contém um número à sua escolha de mensagens pré-definidas. Se a conversação for longa a mesma mensagem pode ser enviadas várias vezes. Cada Thread deverá ter um número de ordem que será enviado nas mensagens para o cliente. Paula Prata, Departamento de Informática da UBI http://www.di.ubi.pt/~pprata/spd.htm Universidade da Beira Interior Sistemas Paralelos e Distribuídos - 2007/2008 Curso: Matemática /Informática Sistemas Distribuídos - 2007/2008 Curso: Ensino da Informática Folha 7 - 2 5- Modifique agora o exercício anterior de tal forma que, quando o número de threads em simultâneo chegar às 5, as novas threads que sejam criadas para servir novos clientes deverão suspender-se, voltando ao estado executável quando houver menos de 5 threads em execução. Quando uma thread começa a servir um novo cliente, verifica se há mais de 5 clientes ligados ao servidor e, nesse caso, antes de se auto-suspender, enviará como primeira mensagem para o cliente a String: “Estou um pouco ocupado, não quer conversar mais tarde?” 6 – Construa uma aplicação cliente / servidor em que o servidor receba do cliente dois arrays de inteiros, calcule a sua soma e devolva o resultado ao cliente. O servidor deverá poder servir vários clientes simultaneamente. Para isso deverá possuir um conjunto de Threads definidas à partida (“pool de treads”) as quais estarão à espera de pedidos dos clientes. Paula Prata, Departamento de Informática da UBI http://www.di.ubi.pt/~pprata/spd.htm