=== 1. Introdução === #intro O módulo de mensagem instantânea utiliza o serviço [http://www.jabberstudio.org Jabber] como agente responsável pelo gerenciamento de contas e troca de mensagens.[[BR]] Este serviço é orientado à conexão, a comunicação cliente-servidor é estabelecida através de socket utilizando [http://www.w3.org/XML XML] seguindo o padrão [http://www.xmpp.org XMPP]. [[BR]][[BR]] === 2. Considerações Iniciais === #consideracoes-iniciais * o serviço Jabber é orientado à conexão; * o [http://www.php.net PHP] é uma linguagem interpretada; * o protocolo [http://www.w3.org/Protocols 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. [[BR]] === 3. Problemas === * manter operante a conexão via socket com o servidor Jabber; * informar ao cliente (browser) novos eventos ocorridos no servidor. [[BR]] === 4. Caminhos adotados === #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.[[BR]] É 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 [http://www.expressolivre.org/html/expressolivre/downloads/modules/instant_messenger.tgz nesse link] ou no item [http://www.expressolivre.org/html/expressolivre/index.php?page=downloads#2 Downloads] do site Expresso Livre. - Página inicial do [wiki:messenger Wiki Expresso Messenger] - Página anterior: [wiki:messenger/doc Documentação]