Frage

Ich habe eine J2ME -App auf meinem Handy (Client).

Ich möchte eine HTTP -Verbindung mit dem Server eröffnen und für aktualisierte Informationen auf dem Server befragen.

Jede Umfrage wird GPRS -Bytes verbrauchen und auf lange Sicht teuer, da die GPRS -Abrechnung auf Paketen basiert, die gesendet und erhalten wurden. Gibt es eine Byte -effiziente Wahlweise mithilfe des HTTP -Protokolls?

Ich habe auch von langen Umfragen gehört, aber ich bin mir nicht sicher, wie es funktioniert und wie effizient es sein würde.

Tatsächlich wäre der bevorstehende Weg, dass der Server der Telefon -App mitteilt, dass neue Daten bereit sind, auf diese Weise zu verwenden, nicht erforderlich ist. Ich kenne diese Techniken jedoch nicht, insbesondere in J2ME.

War es hilfreich?

Lösung

Wenn Sie dieses Problem nur mit HTTP lösen möchten, lange Umfragen wäre der beste Weg. Es ist ziemlich einfach. Zuerst müssen Sie eine URL auf der Serverseite zur Benachrichtigung einrichten (z. B. z. B. http://example.com/notify) und ein Benachrichtigungsprotokoll definieren. Das Protokoll kann so einfach wie einige Textzeilen sein und jede Zeile ist ein Ereignis. Zum Beispiel,

  MSG user1
  PHOTO user2 album1
  EMAIL user1
  HEARTBEAT 300

Der Polling -Thread am Telefon funktioniert so,

  1. Machen Sie eine HTTP -Verbindung zur Benachrichtigungs -URL. In J2ME können Sie GCF httpConnection verwenden.
  2. Der Server blockiert, wenn keine Ereignisse vorhanden sind.
  3. Wenn der Server antwortet, holen Sie sich jede Zeile und leiten Sie einen neuen Thread an, um die Anwendung und den Loopback auf #1 zu informieren.
  4. Wenn die Verbindung aus irgendeinem Grund schließt, schlafen Sie eine Weile und gehen Sie auf Schritt 1 zurück.

Sie müssen auf die folgenden Implementierungsdetails achten.

  1. Tune HTTP -Zeitüberschreitungen sowohl auf Client als auch auf Server. Je länger die Auszeit ist, desto effizienter. Die zeitgesteuerte Verbindung führt zu einer Wiederverbindung.
  2. Aktivieren Sie HTTP Keepalive sowohl auf dem Telefon als auch auf dem Server. Der 3-Wege-Handshake von TCP ist in GPRS-Semester teuer. Versuchen Sie, dies zu vermeiden.
  3. Veraltete Verbindungen erkennen. In mobilen Umgebungen ist es sehr einfach, veraltete HTTP -Verbindungen zu erhalten (die Verbindung ist weg, aber der Polling -Thread wartet noch). Sie können Herzschläge verwenden, um sich zu erholen. Sagen Sie, die Herzschlagrate beträgt 5 Minuten. Der Server sollte in alle 5 Minuten eine Benachrichtigung senden. Wenn keine Daten vorhanden sind, senden Sie einfach Herzschlag. Am Telefon sollte der Umfragethread versuchen, die Wahlverbindung zu schließen und wieder zu öffnen, wenn nichts für 5 Minuten erhalten wird.
  4. Umgang mit Konnektivitätsfehlern sorgfältig. Lange Umfragen funktionieren nicht gut, wenn Probleme mit Konnektivität vorliegen. Wenn nicht richtig gehandhabt, kann es sich um den Deal-Breaker handeln. Zum Beispiel können Sie in Schritt 4 viele Pakete verschwenden, wenn der Schlaf nicht lang genug ist. Überprüfen Sie nach Möglichkeit die Verfügbarkeit von GPRS auf dem Telefon und setzen Sie den Wahlbereichen in die Warteschleife, wenn GPRS nicht verfügbar ist, um den Akku zu sparen.
  5. Die Serverkosten können sehr hoch sein, wenn sie nicht ordnungsgemäß implementiert werden. Wenn Sie beispielsweise Java Servlet verwenden, hat jede laufende Anwendung mindestens eine entsprechende Wahlverbindung und seinen Thread. Abhängig von der Anzahl der Benutzer kann dies schnell einen Tomcat abtöten :) Sie müssen ressourceneffiziente Technologien wie Apache Mina verwenden.

Mir wurde gesagt, dass es andere effizientere Möglichkeiten gibt, Benachrichtigungen auf das Telefon zu bringen, z. B. die Verwendung von SMS und einige Tricks auf IP-Ebene. Sie müssen jedoch entweder eine nicht portable Programmierung auf niedrigem Niveau durchführen oder auf Risiken von Patentverstößen stoßen. Lange Umfragen ist wahrscheinlich die beste, die Sie mit einer HTTP -Lösung erhalten können.

Andere Tipps

Ich weiß nicht genau, was du mit "Umfragen" meinst, meinst du so etwas wie IMAP Idle im Leerlauf? Eine Verbindung bleibt offen und es gibt keinen Overhead, um die Verbindung immer wieder aufzubauen. Wie bereits erwähnt, ist eine andere mögliche Lösung der Kopfkopf einer HTTP -Anfrage (vergessen, danke!).

Schauen Sie sich das an Lernprogramm Für die Grundlage von HTTP -Verbindungen in J2ME.

Das Schieben von Daten in eine Anwendung/ein Gerät ohne Push -Support (wie ein Blackberry) ist nicht möglich.

Das HEAD HTTP -Anfrage Ist die Methode, die HTTP bietet, wenn Sie überprüfen möchten, ob sich eine Seite geändert hat oder nicht, sie wird von Browsern und Proxy -Servern verwendet, um zu überprüfen, ob eine Seite aktualisiert wurde oder nicht, ohne viel Bandbreite zu konsumieren.

In HTTP -Begriffen ist die Kopfanfrage die gleiche wie

Der beste Weg, dies zu tun, ist die Verwendung der Socket -Verbindung. Viele Anwendungen wie Google Mail verwenden sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top