<$BlogRSDUrl$>

Friday, July 01, 2005

 
Mais notas sobre utilizadores, contactos e afins:

Cada utilizador tem uma lista de contactos.

Cada contacto pode ou não ser um utilizador registado no PISCO.

Para ter acesso à informação de presença de um contacto é necessário que este seja utilizador registado do PISCO.

Para obter informação de presença sobre um utilizador do PISCO é necessário a existencia de uma relação de confiaça entre utilizadores.

É o utilizador que publica a sua disponibilidade, podendo altera-la a qualquer momento.

Para estabelecer uma relação de confiança entre utilizadores, é necessário que um utilizador responda afirmativamente a um convite de outro utilizador.

Depois de estabelecida a relação de confiança, os utilizadores passam a receber notificações com as alterações de disponibilidade dos seus contactos.

É também possivel estabelecer relações de confiança entre utilizadores e um grupo de utilizadores.

Existem dois tipos de grupo, livres e privados. Os primeiros são de acesso livre e os segundos funcionam à base de convite.

Cada utilizador pode definir a sua disponibilidade ao nivel do grupo, ou do utilizador.

Thursday, June 30, 2005

 
Notas sobre grupos de utilizadores:

Podem ser publicos ou privados.

Toda a gente se pode inscrever num grupo publico.

Para pertencer ao um grupo privado é necessário obter autorização/ ser convidado.

Qualquer utilizador pode criar um grupo. Torna-se assim dono/administrador desse grupo.

Aplicando a noção de grupo ao serviço de presença levanta as seguintes questões?

Ser possivel bloquear a informação de presença a todo o grupo?

Dar acesso a todos os membros do grupo à informação de presença?

Subscrever a serviços de informação instantânea.
Exemplo: quero receber informações de transito sobre a 2ª circular.

Onde guardar informação sobre grupos. No serviço de users, contactos ou de presença ???

 
Serviço de Presença

Dado a proximidade entre o serviço de presença e o serviço de notificações decidi investigar as necessidades do primeiro para decidir como implementar o segundo. Após uns dias de leitura eis as conclusões.

O que é um serviço de presença?

Um serviço de presença permite saber quais aos utilizadores que se encontram "presentes" num sistema, em qualquer instante.

Esta caracteristica de instantaneidade, permite melhorar as aplicações de colaboração online.

Hoje em dia, a aplicação mais comum, onde é encontrada a noção de presença, é nos serviços de mensagens instâneas.

Não é dificil encontrar outras aplicações onde a noção de presença traz uma mais valia na qualidade do serviço prestado. Seguem-se alguns exemplos.


Algumas caracteristicas de um serviço de presença

Restrições de acesso, ou seja, é necessário obter autorização para poder ter informação sobre a presença de um utilizador.

É o utilizador que publica o seu estado e que recursos estão disponiveis. Exemplos:
Para cumprir estes objectivos é necessário que o serviço de presença noção dos seguintes conceitos.
Funcionamento:

Quando o utilizador Xpto se liga, o serviço de presença notifica todos os seus contactos com autorização que que Xpto está online. Em intervalos regulares o utilizador envia uma mensagem de heartbeat ao serviço para mostrar que ainda de encontra online. Quando o utilizador não envia um heartbeat num periodo superior ao estipulado, o serviço assume que o utilizador está offline.

Wednesday, June 29, 2005

 
Algumas ideias engraçadas sobre o serviço de presença no site da Nokia.

Thursday, June 09, 2005

 
Infraestrutura de notificações,
entidades presentes e suas responsabilidades.


Serviço de notificação
PostBox
Channel

Virtualiza o canal de rede (HTTP, TCP:1234, etc) e a forma de comunicação.

Pode ser:
Relay

Permite a clientes com capacidades de comunicação limitada receberem notificações.

Considerações sobre notificações

Uma notificação é um aviso de que algo aconteceu.

Tipos de notificação
Deve permitir o armazenamento de notificações.
Pode existir aviso(s) de recepção.
Permitir entrega de notificações de um modo diferido.


Thursday, February 17, 2005

 
Site interessante sobre patterns & pratices via MSDN.

Tuesday, January 25, 2005

 
.NET Remoting, notas gerais

Existem dois tipos de objectos no mundo do Remoting, os objectos moveis e os objectos remotos.

Objectos Remotos
Para um objecto poder comportar-se como remoto na plataforma .NET tem que derivar de MarshalByRefObject.

Na plataforma .NET entende-se por comunicação remota, comunicação entre appDomains.

Objectos Moveis
A classe tem que ter que ser seriavel e todas as suas referencias têm que ser para objectos seriaveis ou para objectos remotos.

Estrutura geral de uma aplicação em .NET Remoting
Existem 3 componentes distintos:
  • Servidor, onde residem os objectos remotos.
  • Cliente, quem efectua os pedidos.
  • um assembly conhecido quer pelo cliente quer pelo servidor, que contém as interfaces dos objectos remotos, bem como a implementação dos objectos moveis que são trocados entre o cliente e o servidor.
Passos na contrução da aplicação
  • definir a interface remota,
  • definir quais os objectos a serem passados entre cliente e servidor.
Implementação do servidor
  • implementar a interface remota,
  • derivar de MarshalByRefObject,
Por o servidor à "escuta" de pedido
  • criar um canal,
     HttpChannel chnl = new HttpChannel(1234);
  • registar o canal,
    ChannelServices.RegisterChannel(chnl);
    

  • registar a classe do objecto como WellKnownService,
    RemotingConfiguration.RegisterWellKnownServiceType(
    
    typeof(RemoteObject),
    "RemoteObject.soap",
    WellKnownObjectMode.Singleton);
Nota: reparar que a classe registada não está explicitamente "ligada" ao canal registado. O que é que se passa aqui? Como é feita a relação entre os dois ?

Implementação do cliente
  • criar e registar um canal,
    HttpChannel channel = new HttpChannel();
    
    ChannelServices.RegisterChannel(channel);
  • criar um proxy para o objecto remoto,
    ICustomerManager mgr = (IRemoteObject) Activator.GetObject(
    
    typeof(IRemoteObject),
    "http://localhost:1234/RemoteObject.soap");
Categorias de objectos remotos

Os objectos remotos estão separados em duas categorias:
  • Server Activated Objects (SAO)
  • Client Activated Objects (CAO)
Server Activated Objects - SAO's

Existem dois tipos de objectos SAO, Singleton e SingleCall.

Se o objecto for criado como Singleton, no máximo,apenas existe uma instância desse objecto, que atende os pedidos de todos os clientes num cenário de concorrencia (é necessário tomar os cuidados correspondentes).
Estes objectos são stateful, ou seja existe manutenção do estado do objecto entre chamadas.


Nota: os objectos Singleton, são particularmente úteis quando se pretende partilhar um recurso entre vários clientes.

No modo SingleCall, é criado um objecto por chamada, que é destruido no final desta, não existindo assim manutenção de estado.
Uma razão para utilização deste tipo de objectos é a sua escalabilidade, que é consequencia destes objectos não necessitarem de manter estado, podendo assim estar espalhados por um conjunto de maquinas.

Publicação de objectos remotos
Por vezes é necessário que uma instância de um objecto já criada, esteja disponível remotamente. Para que isso seja possível é necessário publicar esse objecto da seguinte forma.
YourObject obj = new YourObject();

RemotingServices.Marshal(obj,"YourUrl.soap");
Objectos publicados comportam-se como objectos Singleton.

Client Activated Objects - CAO's

ainda tenho que estudar estes melhor :)

Tempo de vida dos objectos

Os objectos remotos na plataforma .NET são criados com um tempo de vida (TTL) (por omissão é 5m), que é incrementado por cada chamada efectuada ao objecto (por omissão é 2m).

Quando o TTL termina a plataforma procura por objectos sponsor associados ao objecto remoto. Se não existirem sponsors associados ao objecto, ou o sponsor decidir que o TTL não é para ser renovado, o objecto remoto é marcado para ser garbage collected.

Algum cliente que ainda possua uma referência para o objecto e efectue uma chamada, recebe uma excepção.

Nota: Só têm o campo TTL objectos Singleton ou objectos CAO.
Nota2: Tenho que estudar melhor os sponsors.

Tipos de Evocação

Existem três tipos de evocação:
Chamadas sincronas
Neste tipo de chamadas o cliente fica bloqueado até o servidor ter terminado a tarefa. Alguma excepção ocorrida do lado do servidor é lançada na linha de onde o método foi chamado.

Chamadas assincronas
São efectuadas em duas fases:
  1. o cliente efectua a chamada, não ficando bloqueado à espera do resultado,
  2. se o cliente quiser receber o valor de retorno do método chamado, tem que chamar outro método, este já bloqueante.
Nota: trocando por miudos, o cliente pode dizer ao servidor, "vai despachando lá isso , que eu já cá volto para receber."

Chamadas assincronas one way
São iguais às chamadas assincronas, mas não permitem receber o retorno dos métodos.












Thursday, January 06, 2005

 
Notas sobre o tipo de objectos existentes em .NET Remoting

Pesquisando nos acetatos de FSD sobre remoting, encontrei lá uma tabela que achei interessante transcrever para aqui, pois mostra as diferenças entre os diferentes tipos de objectos.


SAO SingletonSAO Single Call CAO
Manutenção de estadoSimNãoSim
Tempo de vida do objectoControlado pelo lease managerDuração da chamada ao métodoControlado pelo lease manager
Construtor
Apenas sem parametrosApenas sem parametrosQualquer tipo de construtor

SAO - Server Activated Objects
CAO - Client Activated Objects

Notas adicionais:
Para utilizar objectos CAO é necessário que o assembly com a implementação do objecto esteja do lado do cliente, em vez de conhecer apenas a interface como acontece nos objectos SAO, no entanto, esta limitação não é problematica no meu caso pois cada cliente, funciona ao mesmo tempo como servidor.

É possivel utilizar um soapsud (???) em vez do assembly. Tenho que investigar melhor se é vantajoso.


É necessário investigar como funciona o lease manager e quais são as suas opções de configuração.


 
Notas para a implentação do protótipo do serviço de IM

Existem dois componentes:
  1. Um web service, onde a aplicação cliente efectua o login, e que tem conhecimento de quem está online e qual a sua localização.
  2. Um objecto remoto que está localizado na maquina do cliente, que funciona como caixa de mensagens.
A opção nesta altura é utilizar ligações directas entre os clientes, utilizando .net remoting com client activated objects (CAO).

Esta opção tem consequência serem utilizadas n ligações para conversar com n clientes diferentes, o que me parece razoavél pois não estão a ser gastos recursos de mais nenhum servidor.

Nota: ainda estou na duvida entre a utilização de objectos remotos CAO, ou server activated objects(SAO) em modo Singlecall. Pelo que percebi a diferença está na capacidade de manter estado e no tempo de vida do objecto.


This page is powered by Blogger. Isn't yours?