2009-07-23 6 views
4

Ich habe einen einfachen Chat-Server erstellt, der vom Client-Polling gesteuert wird. Clients senden alle paar Sekunden Datenanforderungen und erhalten neue Nachrichten sowie Informationen darüber, ob ihr Peer noch verbunden ist.Wie erstelle ich einen Chat-Server, der nicht durch Abfragen gesteuert wird?

Da der Client auf einer mobilen Plattform (iPhone) läuft, habe ich nach Möglichkeiten gesucht, das Abrufen loszuwerden, wodurch die Batterie schnell entladen wird. Ich habe gelesen, dass es möglich ist, eine http-Verbindung unbegrenzt offen zu halten, aber ich habe nicht verstanden, wie man diese Technik in der Praxis nutzt. Ich frage mich auch, ob solche Verbindungen stabil genug sind, um sie in einer mobilen Umgebung zu verwenden.

Das ideale Szenario wäre, dass der Server Daten nur dann an Clients sendet, wenn ein Ereignis aufgetreten ist, das sie beeinflusst (z. B. wenn ein Peer eine Nachricht sendet oder offline geht).

Ist es ratsam zu versuchen, dies über http zu erreichen, oder müsste ich mein eigenes Protokoll über TCP schreiben? Wie schwer wäre es, xmpp an meine Bedürfnisse anzupassen (mein Chat-Server hat einige spezielle Funktionen, die ich einfach implementieren müsste).

Antwort

4

Wie wäre es Push-Technologie? siehe http://en.wikipedia.org/wiki/Comet_(programming)

+2

http://stackoverflow.com/questions/337985/comet-server-push-to-client-on-iphone –

+0

Yep, das ist, was ich im Sinn hatte, und die Diskussion, die Russell L verbunden ist, ist auch sehr hilfreich . Danke beiden. – Felixyz

1

Ich habe gerade this article mich, die folgende Technik beschreibt (die ich in der Vorlagefrage):

... haben der Client eine HTTP-Anforderung machen und haben der Server die Anforderung halten in der Warteschlange, bis eine Nachricht zu drücken ist. Wenn die TCP/IP-Verbindung verloren oder abgelaufen ist, wird der Client eine neue HTTP-Anforderung erstellen, und die Verzögerung ist nur die Umlaufzeit für ein Anfrage/Antwort-Paar. . . dieses Modell zwei TCP/IP Verbindungen für HTTP, Client-Server effektiv erfordert, wenn auch keine dauerhafte und daher mobil freundlich

1

Sie möchten vielleicht this project, die eine Vielzahl von Techniken einschließlich Comet verwendet. Release details are here, hier ist ein Ausschnitt aus dieser Seite

Es ist mir eine große Freude der Lage sein, die erste öffentliche ankündigen eines Projekts zeigt, dass ich auf in meiner Freizeit im letzten Monat oder gearbeitet haben zwei, eine neue Web Based IRC Chat Anwendung.

Dieses Projekt bringt viele neue Technologien zusammen, die entwickelt werden musste dies ein gangbarer zu machen, skalierbar und effizient.

Einige der zugrunde liegenden Werkzeuge bauen auf dieses posible machen, die ich für ‚stabil genug‘ sind bereits erschienen, wie die php Socket Daemon library i schrieb der Lage sein, beschäftigen Hunderte bis zu vielen tausend „ Comet "http Verbindungen und eine gleiche Menge von IRC-Client-Verbindungen.

0

Ich denke, das ist fast unmöglich und gefährlich. Das Internet arbeitet statuslos und verbindungslos, dh die Verbindung zwischen Client und Server wird immer als unzuverlässig behandelt. Und das ist nicht zum Spaß.

Indem Sie versuchen, eine statusbehaftete Verbindung zu erhalten, führen Sie neue Probleme ein. Vor allem aus einer 3g-Anwendung. Was ist, wenn die Verbindung bricht? Sie haben keine Kontrolle über den Server und können nicht pushen.

Ich denke, es wäre sogar einfacher, SMS/SMS zu senden und eine Anwendung, die das behandelt.

+0

Ich scheine, dass viele Leute es erfolgreich mit Cometish-Ansätzen (BOSH usw.) benutzt haben. Wenn die Verbindung unterbrochen wird ... stellst du eine neue Verbindung her? Es wäre interessant, mehr darüber zu erfahren, warum Sie das für nahezu unmöglich halten. – Felixyz

3

Ich denke, Sie beschreiben XMPP über BOSH.

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

Ich habe diese http-Bindungsmethode zwischen einem Chat-Server und JavaScript-Client auf nicht-mobilen Geräten verwendet. Es hat gut für mich funktioniert.

Verwandte Themen