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
Pergunta
Am não tenho certeza se o que eu estou fazendo é absolutamente correto. Mas aqui vai:
- logins de usuários no chat através de uma interface baseada na Web
- usuário é informado sobre atualizações via Comet
- 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?
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.