[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

dica para EP1



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.