PHP Jabber: se eu mensagens de login e de verificação e desconexão, sobre os outros usuários finais I vai aparecer como desconectado

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

  •  21-08-2019
  •  | 
  •  

Pergunta

Am não tenho certeza se o que eu estou fazendo é absolutamente correto. Mas aqui vai:

  1. logins de usuários no chat através de uma interface baseada na Web
  2. usuário é informado sobre atualizações via Comet
  3. O usuário digita detalhes que Goto um arquivo PHP que mais se conecta a um servidor Jabber

Agora o problema é que quando o usuário quer enviar uma mensagem, é simples, execute php em que eu conectar ao servidor Jabber e enviar a mensagem. O problema surge quando estou à espera de uma mensagem. Porque se eu login e verificação de mensagens e desconexão, por outro usuários finais I vai aparecer como desconectado.

Am I abordar este problema de uma forma errada? Devo ligar directamente ao servidor Jabber (via javascript) em vez de uma camada PHP no meio? Como receber mensagens via PHP?

Foi útil?

Solução

este é um problema inerente (ou recurso) com http - há conexões não duradouros (não muito). você precisa de uma solução alternativa, não há solução real.

Você poderia fazer isso com java ou flash, mas isso não é muito bom (javascript 4TW!).

A outra possibilidade seria a criação de um cliente intermediário que traduz conexões entre o navegador eo servidor web para conexões entre o servidor web e o servidor Jabber. confuso, mas possível.

ou talvez haja uma API que ajuda com isso.

a conexão direta com o servidor Jabber via javascript
i possivelmente dormiu durante as últimas Ajax invenções, mas AFAIK você só pode se comunicar com o host do arquivo de origem em HTML vem de (ignorando Greasemonkey e complementos). nenhum domínio diferentes, há portas diferentes, período. , a menos que você está indo para ensinar seu servidor Jabber como servir o seu chatpage-html para o navegador, isso vai ficar problemático. Além disso, ficar ligado nem sequer trabalho, porque isso exigiria várias vias respostas. aqueles só são suportados pela Mozilla, e é por isso que o COMET patinho feio existe mesmo em primeiro lugar. em si cometa é uma solução alternativa para evitar a incapacidade de conexões de espera enquanto a transferência de dados.

Outras dicas

Eu não tentei isso, mas você pode querer olhar em xmpphp . Em segundo lugar, você pode querer considerar manter o usuário conectado para o servidor XMPP (aka um servidor Jabber) durante o tempo que eles estão ligado para o seu site. Você provavelmente vai querer ter um tempo limite de algum tipo no caso de eles sair do seu site e não voltar.

Quanto a saber se você deve ou não se conectar via JavaScript, não vejo por que você não podia. Gostaria de sugerir que você vá para o que parece ser o mais simples para você. Você pode querer verificar para fora Strophe , que eu ouvi coisas boas sobre, para esse caso.

A única biblioteca XMPP que eu usei extensivamente, porém, é cabeçote , mas que requer usando python e Kamaelia .

Assim, a questão, tanto quanto eu posso dizer, é que quando o usuário Jabber sobre o outro responde finais. O problema existe, pelo menos em parte, é que o usuário está respondendo a outro usuário no servidor Jabber, ainda deseja que o script php estar ciente de que esta resposta tenha ocorrido sem segurar o aberto conexão (que faz sentido uma vez que o script não está funcionando, provavelmente).

Uma opção, ainda que muito boba, é:

  • Tenha um script php que pode intermediar uma conexão com o servidor Jabber para enviar e receber para o usuário em sua página,

  • Use AJAX para enviar mensagens para o usuário (o AJAX apontaria para o script acima, o script iria enviar a mensagem.)

  • Tenha um loop infinito Javascript que pings o mesmo script sempre 10 segundos ou mais, o check-in para ver se há mensagens. Se houver, eles se volta para o cliente e saída para o usuário passado.

Existem apenas duas questões com o acima:

1) Se o usuário não está conectado quando a mensagem é transmitida, será o script php ainda ver / fazer passar a mensagem?

2) Um cliente laço lado que faz requisições Ajax a cada 3 segundos provavelmente seria um enorme ralo.

Solução 2:

OpenFire Jabber servidor. Ele vem com um cliente de chat web embutido, e tem um addon chamado Fastpath, que se destina a lidar com chats baseados em HTML no lado do cliente (como o recurso de "chat com um agente de agora!" Em muitas páginas de suporte.)

Nós usamos isso no trabalho e é muito personalizável, pode ser integrado com outros scripts (por exemplo, se você quer um script que preenche os detalhes de usuários de seu login, ou adiciona algum avatar personalizado, ou o que for), e -lo (OpenFire) tem toneladas de outras extensões e complementos que, se isso não é o que você quer, eles provavelmente têm o que você está procurando.

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