Frage

Ich suche eine Art von Buchse / COMET Typ Funktionalität von meinem Server (en) auf meine iPhone Anwendung zu etablieren. Im Wesentlichen jederzeit ein Benutzer ein beliebiges Objekt ‚schmutzig‘ auf dem Server festgelegt verwaltet, von sagen uns, ihre Adresse zu aktualisieren .. das Feedback sollte vom Server auf alle Clients übertragen werden, um eine Live-Umfrage auf den Server zu halten. Das Schlagwort dafür ist COMET nehme ich an. Ich weiß, es ist DWR da draußen für Web-Browser-Anwendungen, so denke ich, vielleicht ist es am besten, eine versteckte UIWebView in jedem meiner Controller setzen nur so kann ich aus der Box bekommen COMET von ihrem JavaScript-Framework? Gibt es eine elegantere Ansatz?

War es hilfreich?

Lösung

Es gibt ein paar Lösungen Client eine STOMP zu verwenden.

STOMP ist unglaublich einfach und leicht, perfekt für das iPhone.

Ich benutzen diese als meinen Ausgangspunkt, und fand es sehr gut. Es hat ein paar Objektzuordnung / Speicherleck Probleme, aber sobald ich den Dreh iPhone-Programmierung bekam, waren diese leicht auszubügeln.

Ich hoffe, das hilft!

Andere Tipps

Sie können gewöhnliche TCP / IP-Socket in Ihrer Anwendung?

A) Wenn ja, dann auf jeden Fall ein Raw-TCP / IP-Socket elegantere Lösung ist. Von Ihrem iPhone App warten Sie nur für Benachrichtigungsereignisse. Die Buchse ist so lange offen, wie Ihre Anwendung geöffnet ist. Wenn Sie möchten, können Sie auch das HTTP-Protokoll / Header verwenden.

Auf der Serverseite können Sie einige Framework verwenden, um Server zu schreiben, die effizient Tausende von offenen TCP / IP-Verbindungen verarbeiten. zB Verdrehte , eventmachine oder libevent . Dann bindet nur den Server-Hauptbuchse an HTTP-Port (80).

Die Idee ist, einen Server zu verwenden, die nur eine einzige Datenstruktur pro Client hält. Erhält Aktualisierungsereignis von einer DB-Anwendung und schiebt ihn dann nach rechts Client.

B) Nein, Sie müssen Apache und HTTP-Client auf dem iPhone Seite verwenden. Dann sollten Sie wissen, dass ganz COMET Lösung in der Tat Arbeit um für Beschränkungen der HTTP-Protokolls und Apache / PHP.

Apache wurde entwickelt, um viele kurze Zeit Verbindungen zu handhaben. Soweit ich weiß, nur neuesten Versionen von Apache (mpm Arbeiter) effizient große Anzahl geöffneter Verbindung verarbeiten können. Zuvor wurde Apache einen Prozess pro Verbindung zu halten.

Web-Browser hat eine Grenze von gleichzeitigen offenen Verbindungen zu einem Web-Server (URL-Adresse in der Tat, z. B. www.foo.com, nicht die IP-Adresse www.foo.com). Und die Grenze ist 2-Verbindungen. Darüber hinaus ermöglicht ein Browser nur für AJAX-Verbindungen zu demselben Server, von dem die Haupt-HTML-Seite heruntergeladen wurde.

Ich schrieb einen Webserver für genau diese Art der Sache zu tun. Ich schiebe Neuigkeiten in Echtzeit über den Server mit langer Abfrage und als Beispiel hatte ich

WebSync hat einen Javascript-Client, der auf dem iPhone funktioniert, wenn es das ist, was Sie nach

Würde Lang Polling Arbeit für das, was Sie erreichen wollen? Sie können die Client-Seite in ein paar Zeilen regelmäßig Javascript implementieren, das leichter ist als jeder Rahmen möglicherweise sein könnte.

Es wäre auch trivial es in ObjC zu implementieren (eine Verbindung, auf eine Antwort warten oder Timeout, Wiederholung)

Die Antworten auf meine Frage Simple "Lang Polling" Beispiel-Code? hoffentlich erklären wie extrem einfach lange Polling ist ..

Im Grunde würden Sie fordern Sie einfach eine URL wie üblich - der Web-Server die Verbindung akzeptieren würde, aber keine Daten senden, bis es verfügbar ist. Wenn Sie Daten empfangen, oder die Verbindungszeiten-out, schließen Sie (und wiederholen)

Die komplizierteste Bit würde Server-Server-Seite sein, wie Sie nicht regelmäßig Gewinde Web-Server wie Apache verwenden können, obwohl dies auch der Fall bei Comet ist ..

StreamHub Comet Server aus der Box mit dem iPhone arbeitet, keine Plugins oder etwas benötigt. Gerade durchsucht, um ihre Website auf meinem iPhone und alle Beispiele arbeitete, brauchte nicht Flash oder etwas zu installieren.

Möchten Sie / haben, die Kommunikation tun für Ihre App über http? Wenn nicht, können Sie CFNetwork Rahmen verwenden, um Sockets zu verwenden (TCP / UDP) Ihre Anwendung und Server kommunizieren zu können. Von dem, was ich von dem CFNetwork Stapel gesehen habe, ist es ziemlich cool, und macht es ziemlich zu Strom straitforward lesen und schreiben, und ermöglicht eine synchrone und asynchrone Kommunikation. Es ermöglicht auch Sie Rückrufe auf dem Sockel zu definieren, so dass Sie wie empfangenen Daten benachrichtigten die Ereignisse zu bekommen, Verbindung hergestellt, usw. in Ihrem Beispiel So könnten Sie die Informationen über die Socket an den Server senden, und dann könnte man eine definieren Rückruf, der für eingehende Daten im Stream hören würde und dann die App entsprechend aktualisieren.

EDIT: Hab ein wenig mehr Forschung, und wenn Sie den Socket-Ansatz gehen, können Sie auch an den NSStream Klassen aussehen wollen. Sie sind Cocoa Abstraktionen auf den CFSocket Sachen bauen.

Sie nicht erwähnt, welche server Tech Sie verwenden. Aber für den Fall ist es Microsoft .NET (oder für andere Googler, die über diese kommen), gibt es eine einfache Möglichkeit für Kometen: http://www.codeplex.com/ncomet .

COMET, LightStreamer, AJAX alles, was Junk ist gebrochen. Es ist Grundlagen der TCP, dass kein ‚Keep-Alive‘ immer garantiert werden, ohne Verkehr Pingen .. So können Sie diese lange Polling vergessen, wenn jede anständige Zuverlässigkeit oder rechtzeitige Lieferung zu gewährleisten ist ..

Es ist nur ein Hype jeder sah im Jahr 2003 durch zurück, als die lahme Manie aus gekickt ..

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