O que falta para ficar perfeito?

Pouca coisa ficou diferente do nosso gosto, e muito pouca coisa ficou abaixo da expectativa.

Servidor multi-threaded

O servidor (br.shmem.server.Server) cria uma nova thread cada vez que um cliente se conecta a ele. Nossa primeira idéia seria implementar um thread pool no servidor. Esta é apenas uma questão de performance e escalabilidade que pode ser alvo de melhorias.

Coleta de entradas inválidas no cache cliente

Os clientes (ou seja, cada instância de br.shmem.SharedMemory) possuem uma Hashtable com todas as cópias em uso naquele host. Essas entradas no cache cliente podem ser mantidas mesmo depois que o dono do objeto original o remove (unshare) do espaço global.

Faltou apenas dar aos clientes a opção de remover esta cópia! Ou seja, mesmo depois que o objeto "desaparece", os clientes continuam usando a última cópia que eles tinham, mas não podem mais escrever no objeto.

Criptografia e isolamento dos dados

As mensagens são assinadas. Os Timestamps são gerados todos pelo servidor, e sua autenticidade é verificada sempre que necessário. O servidor também autentica um cliente para outro. Mas as mensagens em si, e os objetos que viajam pela rede não são criptografados.

Por esse motivo, o pacote não é recomendado para aplicações que transmitam dados sensíveis, como senhas, dados bancários, etc. O isolamento dos dados também é um ponto onde o pacote pode ser aprimorado.

O servidor não sabe se os hosts funcionam

Clientes podem cair sem dar logout. O servidor não detecta o problema, o que pode trazer inúmeros problemas numa aplicação. O servidor tem a capacidade de enviar uma mensagem "ping" para os clientes, mas não tem a thread "coletora" rodando. Seria muito interessante implementar essa parte o mais rápido possível.