XMPP: Como solicitar o servidor para a presença status dos contatos de um usuário?

StackOverflow https://stackoverflow.com/questions/4029924

  •  26-09-2019
  •  | 
  •  

Pergunta

Temos um site e desenvolvemos um sistema de bate -papo para ele usando a biblioteca STROPHE.JS e o Ejabberd XMPP Server. Usamos o anexo da sessão iniciado com PHP (usando uma biblioteca interna). O que fazemos é livrar e SID do script PHP e usar o anexo da sessão de Strophe. O referido RID e SID são armazenados em um biscoito e o valor do RID no cookie é atualizado a cada atualização do RID no Strophe.js.

Isso funciona bem, após o login, recebemos o status de presença de cada um de nossos contatos. O problema é que, quando você vai a outra página do site e anexa usando o referido RID (usamos o valor incrementado produzido por Strophe) e SID, o servidor não enviaria mais informações de presença de seus contatos, em vez de Quando você fez login. Isso fez com que nossa área de contatos parecesse invisível, mesmo que eles estejam online. Eles só apareceriam on -line se você (ou seu contato) faça logon no bate -papo, faça o login novamente (já que você receberá uma atualização de presença do servidor XMPP).

Escrevi uma solução alternativa em que o status de presença de seus contatos é salvo em um cookie (todos os contatos on -line terão seus jids salvos no cookie) quando uma presença for recebida do servidor. Isso é verificado cada carregamento de páginas, se o cookie estiver definido, será lido e todos os jids do cookie serão marcados como online. Isso está funcionando bem, mas pode haver algumas maneiras melhores de resolver isso, usando os comportamentos padrão do XMPP.

Foi útil?

Solução

Os servidores XMPP enviam sondas de presença para todos os seus contatos em seu nome ao enviar sua própria presença inicial para o servidor. A partir de então, você receberá apenas alterações de status de presença de seus contatos.

Se você perder o estado de presença de seus contatos, precisará enviar suas próprias sondas de presença para restabelecer esse estado. No entanto, isso provavelmente não é algo que você deseja fazer muito, e passar pelo estado de presença provavelmente é preferido na maioria dos casos.

Você pode tentar passar o estado via XMPP. Por exemplo, você pode usar o armazenamento XML privado (XEP-0049), PubSub (XEP-0060) ou PEP (XEP-0163).

Outra opção em vez de cookies para passar o lado do cliente é usar um objeto HTML5 SharedWorker para manter o estado.

Outras dicas

Estremeço ao pensar nas propriedades da escala associadas ao armazenamento de toda a presença que você acabou de receber do servidor de volta ao servidor em armazenamento privado. O armazenamento privado quase sempre é apoiado no armazenamento de longo prazo, em vez de armazenado na memória, então você vai moer o disco do servidor para a poeira.

Se você deseja armazenar mais estado no navegador e isolar -se da versão do navegador, e já está usando jQuery, então Jstore é muito doce.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top