Introdução - Servidores de Alunos do DEI

Propaganda
Sistemas Distribuídos
SuDoku
Informações sobre o documento
Tabela de revisões
Versão
Autores
Descrição
Data
1.0
Hugo João Gomes
Nuno Rafael Figueiredo
Implementação do
Campeonato de SuDoku (com
chat)
19/10/2005
2.0
Hugo João Gomes
Nuno Rafael Figueiredo
Comunicação em Java RMI.
Integração com Servidor TCP.
31/10/2005
3.0
Hugo João Gomes
Nuno Rafael Figueiredo
Comunicação via HTTP com
Servlets. Integração com
Servidor RMI.
16/11/2005
841068998
-1-
Sistemas Distribuídos
SuDoku
Índice
Informações sobre o documento ________________________________________ 1
Tabela de revisões____________________________________________________ 1
Índice ______________________________________________________________ 2
Introdução __________________________________________________________ 3
Regras do jogo SuDoku ____________________________________________________ 3
Chat _____________________________________________________________________ 3
Ranking __________________________________________________________________ 3
Planeamento do projecto ___________________________________________________ 3
Versão UDP + TCP _______________________________________________________ 3
Versão Java RMI + TCP ___________________________________________________ 4
Arquitectura da aplicação ______________________________________________ 5
Autenticação ______________________________________________________________ 5
Eu acabo os outros acabam _________________________________________________ 6
Envio e recepção de mensagens _____________________________________________ 7
Comunicação ________________________________________________________ 8
Objectos transitáveis da aplicação ___________________________________________ 8
Tratamento de falhas _______________________________________________________ 8
Manual do utilizador _________________________________________________ 10
Manual de instalação e configuração ___________________________________ 12
Anexo I – compila.bat ________________________________________________ 13
Anexo II – registo.bat ________________________________________________ 13
Anexo III – teste.bat __________________________________________________ 13
841068998
-2-
Sistemas Distribuídos
SuDoku
Introdução
Desenvolvimento de uma aplicação em Java, que permite que vários utilizadores em
modo distribuído possam competir num campeonato de SuDoku1 e ao mesmo tempo
comunicar entre si.
Regras do jogo SuDoku
O SuDoku é um jogo que consiste no preenchimento de grelhas (9x9) de números. A
única regra a respeitar no preenchimento de grelhas SuDoku é a não existência de
repetições de números em cada linha, coluna e bloco. Assim, para resolver a grelha,
cada linha, coluna e bloco, tem de conter todos os números de 1 a 9, estando
resolvida quando todos os seus quadrados estiverem preenchidos. Cada grelha tem
solução única.
Chat
A aplicação tem um serviço de mensagens instantâneas. Com este serviço, pode
conversar online através de mensagens de texto em tempo real com os utilizadores
autenticados.
Ranking
O ranking é actualizado automaticamente. O utilizador deverá tentar preencher a
grelha o mais rápido possível: assim que terminar envia para o servidor. O primeiro
cliente a enviar a grelha correctamente preenchida ganha os respectivos pontos
associados à grelha e aumenta a sua pontuação no ranking.
Planeamento do projecto
Este trabalho está dividido em várias metas.
Versão UDP + TCP
A comunicação entre os clientes e os servidores é feita através de sockets TCP e
UDP. Os servidores obedecem a um mecanismo de replicação. A aplicação é
multithreaded. Existe serialização de objectos. É feito o tratamento de excepções e o
1
O conceito SuDoku apareceu com o matemático suíço Leonhard Euler que em 1783 inventou
os quadrados latinos. O termo SuDoku, originalmente Suuji Wa Dokushin Ni Kagiru, foi aplicado
em 1986, no Japão, e significa “os números têm que estar sós” ou “os números aparecem uma
única vez”.
841068998
-3-
Sistemas Distribuídos
SuDoku
tratamento das falhas transitórias nos sockets de comunicação.
Versão Java RMI + TCP
A comunicação entre os clientes e o servidor primário é feita através de sockets TCP
ou Java RMI. Entre os servidores, a comunicação é feita através de Java RMI.
Podemos ter clientes a usar esta versão RMI que estão a jogar contra e a comunicar
com outros clientes que usam a versão baseada em Sockets, ou seja há
interoperabilidade entre versões.
Os servidores obedecem a um mecanismo de replicação como na versão em Sockets
e são conhecidos por diferentes nomes (exemplo: ServerA, ServerB, ...). A detecção
de falhas entre servidores é também implementada usando Java RMI.
Versão HTTP + Servlets
A comunicação entre cliente e servidor é feita através de HTTP/POST e tem um motor
de Servlets (Tomcat) para receber as invocações HTTP enviadas pelos clientes. A
Servlet interactua com o servidor central (versão anterior) através de invocações RMI.
Passamos a ter três possíveis canais de comunicação com o servidor: Sockets TCP,
Java RMI e HTTP/POST. Podemos ter clientes das 3 versões a interactuar uns com os
outros de uma forma flexível e sustentada.
841068998
-4-
Sistemas Distribuídos
SuDoku
Arquitectura da aplicação
SERVIDOR
JAVA RMI & SOCKETS
Sockets TCP
SERVIDOR
TOMCAT
Java RMI
Java RMI
HTTP/POST
HTTP/POST
Os clientes comunicam com o servidor Java RMI &Sockets, para o envio de objectos,
através de sockets TCP, usando ObjectStreams, ou através Java RMI, ou através de
um motor de Servlets (Tomcat) para receber as invocações HTTP/POST enviadas
pelos clientes (HTTP). Temos então, três possíveis canais de comunicação com os
servidor: Sockets TCP, Java RMI e HTTP/POST.
Autenticação
Antes do novo jogador poder jogar num
campeonato
apresentar
decorrente,
no
dever-se-á
campeonato.
Essa
apresentação consiste no login e na
password que, devidamente reconhecidos,
o integram imediatamente no mesmo campeonato, fornecendo apenas uma
mensagem de acolhimento imediatamente seguida da grelha em jogo e ranking
corrente. No caso do não reconhecimento dos mesmos dados, ser-lhe-á pedido
iterativa e indefinidamente dados reconhecíveis.
841068998
-5-
Sistemas Distribuídos
SuDoku
Cliente Não Autenticado
Servidor
Cliente Autenticado
Autenticação
Não aceite
Grelha
Ranking
Eu acabo os outros acabam
Para potenciar maior competitivismo, o campeonato não espera por jogadores
morosos. Assim que uma grelha é terminada por um jogador, submete-se
imediatamente ao servidor (sem moção do jogador) com o fim de competir por uma
chegada triunfal. No sucesso desta operação, os outros serão notificados desta vitória
antes de receberem nova grelha e actualização do ranking.
Cliente Autenticado
Servidor
Clientes Autenticados
Grelha preenchida
Notificação de fim
841068998
Ranking
Ranking
Grelha
Grelha
-6-
Sistemas Distribuídos
SuDoku
Envio e recepção de mensagens
Durante todo o jogo a aplicação fornece um serviço de conversação em quadro. Este
quadro está disponível para que cada jogador possa escrever as suas mensagens,
sabendo que todos os adversários as possam devidamente identificadas quanto ao
autor.
Cliente Autenticado
Servidor
Clientes Autenticados
Envio de mensagem
Difusão de mensagens
841068998
-7-
Sistemas Distribuídos
SuDoku
Comunicação
Toda a comunicação entre clientes e servidores é estabelecida através de canais TCP,
sob o formato de objectos serializáveis, através de Java RMI ou através de
HTTP/POST. A comunicação entre servidores é estabelecida em Java RMI. O servidor
Tomcat tem um motor de servlets que recebe pedidos do cliente e interactua com o
servidor primário através de Java RMI.
Objectos transitáveis da aplicação
Os objectos que transitam entre o cliente e o serviço são:

Autenticação
o
Do cliente para o servidor: para que este o identifique;
o
Do servidor para o cliente: para que se complete o currículo
SuDokuzesco;

Grelhas
o
Do servidor para o cliente: incompletas, para que este as complete;
o
Do cliente para o servidor: completas e identificadas para que o serviço
pontue e catalogue;

Ranking
o

Do servidor para o cliente: para que este proceda à sua amostragem;
Mensagens
o
Do cliente para o servidor: para que este proceda à suas difusão;
o
Do servidor para o cliente

Reencaminhamento de alguma mensagem de cliente (chat);

Acolhimento (início);

Autenticação inválida;

Fim de jogo + vitória de <fulano>
Tratamento de falhas
A aplicação foi desenhada para estabelecer o campeonato num sistema de vários
servidores. Um primeiro estabelece-se como primário enquanto que os outros se
mantêm num hibernismo, só interrompido pela detecção de uma falha do servidor,
momento em que é discutido e estabelecido a assumissão de uma nova promoção a
servidor primário. O cliente que detectar a quebra de um serviço, irá continuar a tentar
a restabelecer a sua ligação a esse serviço, seja ao servidor anterior seja ao novo,
sem incomodar o jogador, a menos que, num período máximo predefinido, este não
841068998
-8-
Sistemas Distribuídos
SuDoku
seja re-estabelecido, altura em que abandonará os dados a enviar, pelo motivo da não
continuação do campeonato.
Esta aplicação foi agora re-desenhada para estabelecer conectividade com um
servidor Tomcat. Caso ocorra alguma falha temporária no socket de comunicação
entre a aplicação cliente e as Servlets que executam no Tomcat, o cliente irá continuar
a tentar restabelecer a sua ligação, abrindo de novo o socket para com um servidor
disponível, dentro de um período máximo predefinido. Período esse que, se
ultrapassado, o faz assumir indisponibilidade de comunicação com um servidor, sem
incomodar o jogador que poderá continuar a jogar o jogo Sudoku, pois mais à frente a
conectividade com o servidor Tomcat poderá ser re-estabelecida. O jogador apenas
sentirá o problema quando tentar usar o chat sem sucesso, ou se, acabando o jogo,
não conseguir restabelecer a comunicação.
841068998
-9-
Sistemas Distribuídos
SuDoku
Manual do utilizador
Quando devidamente autenticado, a consola assumirá uma aparência como a
mostrada na figura seguinte:
Do lado esquerdo encontra-se o ranking activo, com a listagem da pontuação dos
jogadores activos. Nesta imagem, o ranking encontra-se vazio por ainda não haver
jogadores pontuados no servidor.
Do lado direito, encontra-se uma secção de chat. Em cima, um histórico de
conversações desde que foi ligado, enquanto que em baixo se encontra uma caixa
para entrada de uma mensagem, que será enviada para o servidor e difundida por
todos os jogadores, incluindo ele próprio, altura em que verá o histórico ser
actualizado com a mensagem que ele terá escrito.
No centro encontra-se a secção do jogo: no topo, um amostrador de valores correntes
ao jogo, com o tempo despendido nesta grelha e a pontuação deste jogador (inactivo
nesta versão); em baixo, uma caixa de mensagens, onde a consola mostrará
mensagens reguladoras do jogo; finalmente, no centro, poder-se-á ver a grelha onde o
jogador poderá realizar o seu jogo.
Na grelha, a preto, vê-se os números fornecidos pelo servidor; a azul, as experiências
do jogador. Esta grelha, não permite a inserção de algarismos incorrectos de acordo
841068998
- 10 -
Sistemas Distribuídos
SuDoku
com as regras deste jogo, pelo que o jogador, para efectuar uma experiência, apenas
precisa de ‘clicar’ numa casa vazia que ficará disponível (casa com fundo a branco)
para a inserção de uma algarismo através do teclado. Para anular uma experiência,
deverá fazer um duplo ‘clique’ na casa com a experiência com a pretensão de ser
anulada.
Quando estiverem experiências em todas as casas, uma vez que a consola não aceita
experiências inválidas, estará uma grelha correcta pronta a competir em tempo com
adversários, pelo que a consola incumbe-se de enviar automaticamente a grelha ao
servidor sem esperar pelo jogador. Sendo aceite (o servidor poderá receber outra
grelha que se lhe anteceda), todos os jogadores serão notificados, actualizados e
inseridos numa nova ronda do campeonato.
841068998
- 11 -
Sistemas Distribuídos
SuDoku
Manual de instalação e configuração
Descompactar todo o conteúdo de sudoku.zip para um directório destino a gosto.
Dentro do directório SuDoku,
1) em Windows, executar o ficheiro 'start.cmd';
2) se não estiver o directório do ‘java/bin’ no ‘path’, colocá-lo;
3.a) executar o comando: compila (Anexo I);
3.b) dentro do directório classes executar o comando: registo (Anexo II);
4) executar o comando: teste (jogo do SuDoku) (Anexo III).
841068998
- 12 -
Sistemas Distribuídos
SuDoku
Anexo I – compila.bat
javac -d classes src\elementos\*.java src\jogo\*.java src\net\*.java src\net\tcp\*.java
src\net\rmi\*.java src\sudoku\*.java src\swing\*.java src\utils\*.java
rmic -classpath classes -d classes net.rmi.RMIServer
rmic -classpath classes -d classes net.rmi.RMIClient
Anexo II – registo.bat
start rmiregistry
Anexo III – teste.bat
java sudoku.Teste
841068998
- 13 -
Download