wiki:messenger/intro

Version 20 (modified by rodsouza, 17 years ago) (diff)

--

1. Introdução

O módulo de mensagem instantânea utiliza o serviço  Jabber como agente responsável pelo gerenciamento de contas e troca de mensagens.
Este serviço é orientado à conexão, a comunicação cliente-servidor é estabelecida através de socket utilizando  XML seguindo o padrão  XMPP.

2. Considerações Iniciais

  • o serviço Jabber é orientado à conexão;
  • o  PHP é uma linguagem interpretada;
  • o protocolo  HTTP não foi projetado para manter uma conexão cliente-servidor aberta;
  • requisições de background não podem ser feitas a outros domínios ou ainda outras portas ou mesmo subdomínios do domínio raiz.

Assim sendo temos algumas situalções a serem ponderadas:

  • não é possível uma conexão direta entre o navegador do cliente e o serviço Jabber sem que haja um a interferência de algum meio, seja este qual for;
  • para que o servidor Jabber considere um cliente conectado, é imprecindível, que uma conexão via socket esteja estabelecida e operante;
  • em PHP, para manter um socket operante é necessário que o script que estabeleceu a conexão não termine sua execução;
  • por não estar no escopo do protocolo HTTP a conexão contínua, um servidor jamais poderá mandar informações ao cliente sem que este as solicite.


3. Problemas

  • manter operante a conexão via socket com o servidor Jabber;
  • informar ao cliente (browser) novos eventos ocorridos no servidor.


4. Caminhos adotados

No que diz respeito a manter operante uma conexão via socket, em qualquer que seja a linguagem, se faz necessário uma estrutura de repetição para fazer a manutenção deste recurso.
É sabido que uma estrutura de repetição utiliza recursos de máquina - processador e memória - em níveis altissímos. Por se tratar de plataforma Web e a linguagem em questão - PHP - ser interpretada temos a seguinte problemática:

  • se cada conexão necessita de laço repetitivo para se manter ativa então o resultado seria "N" estruturas de repetições sendo executadas concorrentemente, onde "N" é o quantidade de usuários válidos, ou seja, em números precisos essa quantidade é a mesma que o número de sessões ativas;
  • além dos recursos do seridor que poderá chegar a escassez em ambientes de acesso e tráfego elevado temos ainda a visão do cliente que terá uma requisição que será concluida apenas quando se fechar a página, assim criando uma situação que o consumo de recursos do cliente se daria por intermédio do navedor.

Com isso, atualmente, temos a figura de um gerente de conexões que atua como serviço no servidor e é responsável por todas as ações junto ao servidor Jabber.


  • Faça o download do módulo Expresso Messenger nesse link ou no item Downloads do site Expresso Livre.