Question

J'ai une application J2ME en cours d'exécution sur mon téléphone portable (client),

Je voudrais ouvrir une connexion HTTP avec le serveur et de garder l'interrogation des informations mises à jour sur le serveur.

Chaque sondage effectué utilisera des octets GPRS et serait coûter très cher à la longue, que la facturation GPRS est basée sur les paquets envoyés et reçus. Y at-il un octet moyen efficace d'utiliser l'interrogation du protocole HTTP ?.

J'ai aussi entendu parler du vote à long, mais je ne sais pas comment cela fonctionne et comment il serait efficace.

En fait, la façon dont preffered serait pour le serveur de dire à l'application de téléphone que de nouvelles données est prêt à être utilisé que le scrutin de façon ne sera pas nécessaire à faire, mais je ne connais pas ces techniques surtout dans J2ME.

Était-ce utile?

La solution

Si vous voulez résoudre ce problème en utilisant uniquement HTTP, interrogation longue serait le meilleur façon. Il est assez facile. D'abord, vous devez configurer une URL sur le côté du serveur de notification (par exemple http://example.com/notify), et définir un protocole de notification. Le protocole peut être aussi simple que quelques lignes de texte et chaque ligne est un événement. Par exemple,

  MSG user1
  PHOTO user2 album1
  EMAIL user1
  HEARTBEAT 300

Le fil d'interrogation sur le téléphone fonctionne comme ceci,

  1. une connexion HTTP à l'URL de notification. En J2ME, vous pouvez utiliser GCF HttpConnection.
  2. Le serveur bloque si aucun événement pour pousser.
  3. Si le serveur répond, chaque ligne et se frayer un nouveau thread pour notifier l'application et rebouclage # 1.
  4. Si la connexion se ferme pour une raison quelconque, le sommeil pendant un certain temps et revenir à l'étape 1.

Vous devez faire attention à suivre les détails de mise en œuvre,

  1. Tune HTTP sur les délais d'attente à la fois client et serveur. Plus le délai d'attente, plus efficace. Expiration du délai connexion provoquera une reconnexion.
  2. Activer keep-alive HTTP sur le téléphone et le serveur. La poignée de main à 3 voies de TCP est coûteuse en terme GPRS donc essayer de l'éviter.
  3. Détecter les connexions périmées. Dans les environnements mobiles, il est très facile d'obtenir des connexions HTTP obsolètes (connexion est disparu, mais thread d'interrogation attend toujours). Vous pouvez utiliser les battements de coeur pour récupérer. Dire le rythme cardiaque est de 5 minutes. Serveur doit envoyer une notification à toutes les 5 minutes. Si aucune donnée à pousser, il suffit d'envoyer CARDIAQUE. Sur le téléphone, le fil de vote devrait essayer de fermer et rouvrir la connexion de vote si rien reçu pendant 5 minutes.
  4. erreurs de connectivité de gestion rigoureuse. vote longue ne fonctionne pas quand il y a des problèmes de connectivité. Si non traitée correctement, il peut être le deal-breaker. Par exemple, vous pouvez perdre beaucoup de paquets à l'étape 4 si le sommeil est pas assez long. Si possible, vérifiez la disponibilité GPRS sur le téléphone et mettre le fil de vote en attente lorsque GPRS n'est pas disponible pour économiser la batterie.
  5. coût du serveur peut être très élevé si pas mis en œuvre correctement. Par exemple, si vous utilisez servlet Java, toutes les applications en cours d'exécution aura au moins une connexion de vote correspondant et son fil. En fonction du nombre d'utilisateurs, cela peut tuer un Tomcat rapidement :) Vous devez utiliser des technologies économes en ressources, comme Apache Mina.

On m'a dit qu'il ya d'autres moyens plus efficaces pour pousser les notifications au téléphone, comme l'utilisation de SMS et quelques astuces de niveau IP. Mais vous devez soit faire de la programmation non-portable à faible niveau ou courir des risques de violations de brevets. vote Long est probablement le meilleur que vous pouvez obtenir avec une seule solution HTTP.

Autres conseils

Je ne sais pas exactement ce que vous entendez par « vote », voulez-vous dire quelque chose comme IMAP IDLE ? Une connexion reste ouverte et il n'y a pas de frais généraux pour la construction encore et encore la connexion elle-même. Comme indiqué, une autre solution possible est la tête en-tête d'une requête HTTP (oublié, merci!).

Regardez dans cette tutoriel pour la base de connexions HTTP dans J2ME.

Pousser des données à une application / appareil sans support Push (comme un Blackberry) n'est pas possible.

Le HEAD HTTP demande de href="http://en.wikipedia.org/wiki/HEAD_request#Request_methods" est la méthode HTTP fournit si vous voulez vérifier si une page a changé ou non, il est utilisé par les navigateurs et les serveurs proxy pour vérifier si une page a été mise à jour ou non sans consommer de bande passante.

En ce qui concerne HTTP, la requête HEAD est la même que GET sans le corps, je suppose que ce serait seulement une centaine ou deux octets au maximum qui ressemble acceptable si vos sondages ne sont pas très fréquents.

La meilleure façon de le faire est d'utiliser une connexion socket. De nombreuses applications comme GMail les utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top