[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
dica para EP1
- Subject: dica para EP1
- From: Fabio Kon <PROTECTED>
- Date: Tue, 19 Mar 2002 11:33:01 -0300 (EST)
Oi,
Já que não teremos aula nesta quinta-feira, em virtude da greve geral contra as
mudanças na CLT, e não teremos aula na semana que vem pois será a Semana
Santa, a nossa próxima aula será só no dia 2 de abril que é a data de entrega
do EP1.
Eu estarei na USP normalmente durante semana santa então vocês podem me
procurar se tiver alguma dúvida. Outra alernativa é mandar uma mensagem com
suas dúvidas para a nossa lista.
Aqui vai uma dica importante sobre o EP1:
Talvez vocês já devem ter percebido que a aplicação de bate-papo tem uma
característica peculiar: ela não é uma aplicação cliente/servidor convencional
pois o "servidor" também pode mandar mensagens para os "clientes". Quando um
usuário envia uma mensagem para o servidor, este tem que repassar a mensagem
para outros usuários. Há duas formas de implementar isso:
1) Modelo PUSH. Se adotarmos esse modelo, o servidor de bate-papo envia
(empurra, ou push) as mensagens para os vários clientes sempre que ele
receber uma mensagem nova. Para que o servidor de bate-papo seja capaz de
enviar mensagens CORBA para os usuários, o programa que o usuário executa
tem que ser capaz de receber mensagens CORBA, i.e., ele tem que implementar
um servente e registrar esse servente no ORB de forma a receber as
mensagens enviadas pelo servidor de bate-papo. Assim, o programa com o qual
o usuário do bate-papo interage localmente será tanto um cliente CORBA
quanto um servidor CORBA (simultaneamente). Os ORBs oferecem suporte para
isso sem problemas. Quando o cliente se registrar com o servidor de
bate-papo, ele passa como parâmetro uma referência para o seu "servidor
local" que será responsável por receber as mensagens e imprimir na tela
para o usuário.
Isso é chamado também de "call-backs" pois o servidor
"calls the client back".
2) Modelo PULL. Neste modelo, o programa com o qual o usuário interage
localmente será somente um cliente CORBA, não possuirá um servente e não
implementará nenhuma interface IDL. Neste caso, o cliente deverá de tempos
em tempos (por exemplo, 1 vez por segundo) enviar uma mensagem ao servidor
de bate-papo perguntando se há alguma mensagem nova desde a última vez na
qual ele perguntou. Ajudaria colocar um número de série nas mensagens
dentro do servidor de bate-papo. Esta mensagem que o cliente envia ao
servidor serve para puxar ("pull") os dados do servidor, daí o nome do
modelo.
Obviamente, esta opção é menos eficiente. Mas funciona também. Para
resolver o problema de eficiência, podemos fazer com que as chamadas dos
clientes ao servidor bloqueiem até que o servidor tenha algo a
retornar. Mas aí você vai precisar ter vários (pelo menos 2) threads no seu
cliente, vários threads no servidor, controlar a concorrência de tudo isso
e pode ficar muito complexo. Não recomendo.
Bom, acho que isso é suficiente prá vocês terem uma boa noção das
alternativas para resolver o problema proposto.
Boa sorte e, se você ainda não começou a fazer o EP, por favor, comece o mais
rápido possível pois ele não é tão fácil como pode parecer (se é que ele
parece fácil).
[]s,
Fabio.