Pergunta

Eu criei um servidor de chat simples que é impulsionado por polling cliente. Os clientes enviam pedidos de dados a cada poucos segundos, e se entregou todas as mensagens novas, bem como informações sobre se seus pares ainda está conectado.

Uma vez que o cliente está sendo executado em uma plataforma móvel (iPhone), eu estive procurando maneiras de se livrar da votação, que rapidamente drena a bateria. Eu li que é possível manter uma conexão http abrir indefinidamente, mas não entenderam como utilizar esta técnica na prática. Eu também estou querendo saber se tais conexões são suficientes estável para usar em um ambiente móvel.

O cenário ideal seria que o servidor só envia dados para os clientes quando um evento que os afeta ocorreu (tal como um par de postar uma mensagem ou ir off line).

É aconselhável tentar fazer isso através de HTTP, ou eu teria de escrever meu próprio protocolo sobre TCP? O quão difícil seria para personalizar xmpp à minha necessidade (meu servidor de chat tem algumas características especializadas que eu teria que implementar facilmente).

Foi útil?

Solução

Como sobre tecnologia push? consulte http://en.wikipedia.org/wiki/Comet_(programming)

Outras dicas

Eu acho que você está descrevendo XMPP sobre BOSH.

http://xmpp.org/extensions/xep-0206.html

Eu usei este método http de ligação entre um servidor de bate-papo e cliente javascript em dispositivos não móveis. Funcionou bem para mim.

Você pode gostar de verificar este projecto que usa uma variedade de técnicas, incluindo Comet. Release estão aqui , aqui está um trecho a partir dessa página

É o meu prazer distinto de ser capaz para anunciar a primeira exibição pública de um projeto que eu tenho trabalhado em no meu tempo livre no último mês ou dois, um novo bate-papo Web Based IRC aplicação.

Este projeto reúne uma grande quantidade de novas tecnologias que tiveram que ser desenvolvido para tornar este um viável, escalável e eficiente.

Algumas das ferramentas subjacentes construir a fazer este posible que considero ‘Bastante estável’ já estão liberados, tais como a php soquete Daemon biblioteca i escreveu para ser capaz de lidar com centenas até vários milhares de “Comet” http conexões, e um igual quantidade de conexões de cliente de IRC.

Eu só descobri este artigo eu mesmo, que descreve a seguinte técnica (que me referi na pergunta):

... que o cliente faz uma solicitação HTTP e que o servidor mantenha o pedido sobre a fila até que haja uma mensagem para impulsionar. se a conexão TCP / IP é perdido ou tempo limite, o cliente fazer uma nova solicitação HTTP, eo atraso será apenas o tempo de ida e volta para uma par de pedido / resposta. . . este modelo efetivamente requer dois TCP / IP conexões para HTTP, o cliente para servidor, embora nenhum permanente e daí móvel amigável

Eu acho que isso é quase impossível e perigoso. A internet funciona sem Estado e sem conexão significado que a conexão entre o cliente eo servidor é sempre tratado como não confiáveis. E isso não é para se divertir.

Ao tentar obter uma conexão stateful você está introduzindo novas questões. Especialmente a partir de uma aplicação 3g. E se as quebras de conexão? Você não tem controle sobre o servidor e não pode empurrar.

Eu acho que seria até mais fácil de enviar mensagens de texto / SMS e ter um aplicativo que lida com isso.

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