Natürlich ist mir Ajax bekannt, aber das Problem mit Ajax ist, dass der Browser den Server häufig abfragen sollte, um festzustellen, ob neue Daten vorhanden sind. Dies erhöht die Serverlast.
Gibt es eine bessere Methode (auch mit Ajax) als die häufige Abfrage des Servers?
Antworten:
Ja, was Sie suchen, ist COMET ( http://en.wikipedia.org/wiki/Comet_(programming) . Andere gute Google-Begriffe, nach denen gesucht werden muss, sind AJAX-Push und Reverse-Ajax.
quelle
Ja, es heißt Reverse Ajax oder Comet . Comet ist im Grunde ein Überbegriff für verschiedene Möglichkeiten, langlebige HTTP-Anforderungen zu öffnen, um Daten in Echtzeit an einen Webbrowser zu übertragen. Ich würde StreamHub Push Server empfehlen , sie haben einige coole Demos und es ist viel einfacher, mit ihnen zu beginnen als mit jedem anderen Server. Eine kurze Einführung finden Sie im Tutorial Erste Schritte mit Comet und StreamHub . Sie können die Community Edition verwenden, die kostenlos heruntergeladen werden kann, jedoch auf 20 gleichzeitige Benutzer beschränkt ist. Die kommerzielle Version lohnt sich allein für den Support und Sie erhalten SSL- und Desktop .NET- und Java-Clientadapter. Die Hilfe ist über die Google-Gruppe verfügbarEs gibt eine Reihe von Tutorials im Internet und einen GWT Comet-Adapter .
quelle
Heutzutage sollten Sie WebSockets verwenden. Dies ist der Standard von 2011, der es ermöglicht, Verbindungen mit HTTP zu initiieren und diese dann auf eine auf Nachrichten basierende Kommunikation zwischen Client und Server in zwei Richtungen zu aktualisieren.
Sie können die Verbindung einfach über Javascript herstellen:
Die Sever-Side-Handhabung hängt von Ihrem Tenchnology-Stack ab.
quelle
Schauen Sie sich Comet an (eine Parodie auf die Tatsache, dass Ajax ein Reinigungsmittel ist, ebenso wie Comet), das im Grunde genommen "Reverse Ajax" ist. Beachten Sie, dass hierfür eine langlebige Serververbindung erforderlich ist, damit jeder Benutzer Benachrichtigungen erhält. Beachten Sie daher die Auswirkungen auf die Leistung beim Schreiben Ihrer App.
http://en.wikipedia.org/wiki/Comet_(programming)
quelle
Komet ist definitiv das, was Sie wollen. Abhängig von Ihren Sprach- / Framework-Anforderungen stehen verschiedene Serverbibliotheken zur Verfügung. Beispielsweise ist WebSync ein IIS-integrierter Kometenserver für ASP.NET/C#/IIS-Entwickler , und es gibt auch eine Reihe anderer eigenständiger Server, wenn Sie eine engere Integration mit anderen Sprachen benötigen.
quelle
Ich würde dringend empfehlen, etwas Zeit in Comet zu investieren, aber ich kenne keine tatsächliche Implementierung oder Bibliothek, die Sie verwenden könnten.
Für eine Art "Callcenter-Kontrollfeld" einer Web-App, bei dem der Agent- und Anrufwarteschlangenstatus für ein Live-Callcenter aktualisiert wurde, haben wir eine interne Lösung entwickelt, die funktioniert, aber weit entfernt von einer Bibliothek ist, die Sie verwenden können.
Wir haben einen kleinen Dienst auf dem Server implementiert, der mit dem Telefonsystem kommuniziert, auf neue Ereignisse wartet und ein Foto der Situation erstellt. Dieser Service bietet einen kleinen Webserver.
Unsere Web-Clients stellen über HTTP eine Verbindung zu diesem Webserver her und fragen nach dem letzten Foto (in XML codiert), zeigen es an und fragen dann erneut nach dem neuen Foto. Der Webserver kann an dieser Stelle:
Auf diese Weise erhalten Clients bei Umfragen eine Antwort in maximal 0 bis 30 Sekunden. Wenn ein neues Ereignis bereits generiert wurde, wird es sofort abgerufen. Andernfalls wird es blockiert, bis ein neues Ereignis generiert wird.
Es ist im Grunde ein Polling, aber es ist ein kluges Polling, um den Webserver nicht zu überhitzen. Wenn Comet nicht Ihre Antwort ist, könnte dies sicher mit derselben Idee implementiert werden, aber mit AJAX oder Codierung in JSON, um bessere Ergebnisse zu erzielen. Dies wurde vor der AJAX-Ära entworfen, daher gibt es viel Raum für Verbesserungen.
Wenn jemand eine wirklich leichte Implementierung davon bereitstellen kann, großartig!
quelle
Eine interessante Alternative zu Comet ist die Verwendung von Sockets in Flash.
quelle
Ein weiterer Standardweg ist SSE (Server-Sent Events, auch EventSource genannt , nach dem JavaScript-Objekt).
quelle
Comet wurde tatsächlich von Alex Russell vom Dojo Toolkit ( http://www.dojotoolkit.org ) geprägt. Hier ist ein Link zu weiteren Informationen http://cometdproject.dojotoolkit.org/
quelle
Es gibt andere Methoden. Ich bin mir nicht sicher, ob sie in Ihrer Situation "besser" sind. Möglicherweise verfügen Sie über ein Java-Applet, das beim Laden der Seite eine Verbindung zum Server herstellt und darauf wartet, dass vom Server Daten gesendet werden. Es wäre beim Start etwas langsamer, würde es dem Browser jedoch ermöglichen, selten Daten vom Server zu empfangen, ohne abzufragen.
quelle
Sie können eine Flash / Flex-Anwendung auf dem Client mit BlazeDS oder LiveCycle auf der Serverseite verwenden. Daten können über eine RTMP-Verbindung an den Client übertragen werden. Beachten Sie, dass RTMP einen nicht standardmäßigen Port verwendet. Sie können jedoch problemlos auf die Abfrage zurückgreifen, wenn der Port blockiert ist.
quelle
Durch die Verwendung dauerhafter http-Verbindungen können Sie erreichen, was Sie anstreben.
Schauen Sie sich den Comet-Artikel auf Wikipedia an, das ist ein guter Anfang.
Sie liefern nicht viele Informationen, aber wenn Sie eine Art ereignisgesteuerte Site (a'la digg spy) oder ähnliches erstellen möchten, werden Sie wahrscheinlich versuchen, einen versteckten IFRAME zu implementieren, mit dem eine Verbindung hergestellt wird Eine URL, bei der die Verbindung nie geschlossen wird und Sie dann Skript-Tags vom Server zum Client senden, um die Aktualisierungen durchzuführen.
quelle
Es könnte sich lohnen, sich Meteor Server anzusehen, einen Webserver, der für COMET entwickelt wurde. Schöne Demo und es wird auch von Twitterfall verwendet .
quelle
Sobald eine Verbindung zum Server geöffnet ist, kann sie offen gehalten werden und der Server kann Inhalte pushen, die ich vor langer Zeit verwendet habe
multipart/x-mixed-replace
aber dies funktionierte im IE nicht.Ich denke, Sie können mit Umfragen clevere Dinge tun, die es eher wie Push funktionieren lassen, indem Sie keine unveränderten Header für Inhalte senden, sondern die Verbindung offen lassen, aber ich habe dies nie getan.
quelle
Sie können unsere Kometenkomponente ausprobieren - obwohl sie äußerst experimentell ist ...!
quelle
Bitte überprüfen Sie diese Bibliothek unter https://github.com/SignalR/SignalR, um zu erfahren, wie Daten dynamisch an Clients übertragen werden, sobald sie verfügbar sind
quelle
Sie können auch in Java Pushlets nachsehen, wenn Sie JSP- Seiten verwenden.
quelle
Vielleicht möchten Sie sich auch ReverseHTTP ansehen .
quelle