Wie zeigt man kontinuierliche Echtzeit-Updates wie Facebook-Ticker, meetup.com homepage?

Wie zeigt man kontinuierliche Echtzeit-Updates im Browser wie facebook Ticker, meetup.com homepage? In python, PHP, node.js und was wäre die Leistung Auswirkungen auf der Server-Seite? Auch wie könnten wir das gleiche Update erreichen, wenn die Seite von einem CDN wie Akamai zwischengespeichert wird?

  • Wie benutzt man Python Popen mit einem Espeak und Aplay
  • Python Asynchronous Reverse DNS Lookups
  • Asyncio führt die Aufgaben nicht asynchron aus
  • Wie kann man mehrere Pipes innerhalb des gleichen Prozesses mit Pexpect erstellen und verwenden?
  • Tulpe / asyncIO: Warum nicht alle Anrufe asynchron sind und angeben, wann die Dinge synchron sein sollten?
  • Ertrag von coroutine vs Ausbeute aus Aufgabe
  • 4 Solutions collect form web for “Wie zeigt man kontinuierliche Echtzeit-Updates wie Facebook-Ticker, meetup.com homepage?”

    Sie haben zwei Möglichkeiten (die anderen haben oben beschrieben). Wenn Sie nicht vertraut sind mit einigen der konzeptionellen Ideen hinter jeder Option, dachte ich, ich würde eine Zeile oder zwei über sie geben. Beachten Sie, dass ich diese Konzepte auf einer sehr, sehr hohen Ebene präsentiere.

    Ihre drei Optionen sind:

    1. Kurz-Polling
    2. Web-Steckdose
    3. Komet / langwillen

    Kurzes Polling

    Short Polling überwindet die Einwegkommunikation zwischen Client-Server, indem er den Client zwingt, fortwährend Anfragen an den Server des Formulars zu senden:

    Client: Do you have a message for me? Server: No. Client: (wait x seconds) Client: Do you have a message for me? Server: No. Client: (wait x seconds) Client: Do you have a message for me? Server: Yes. Here it is! Client: Yay! Client: (update message) 

    Das ständige Nörgeln im Auftrag des Kunden heißt Polling . Um diese Struktur zu implementieren, musst du deinen Server einrichten, um diese Polling-Anfragen vom Client zu "hören". Der Server muss diese Meldungen auch irgendwo speichern, so dass, wenn Nachrichten bereit sind, der Server sie liefern kann. Auf einer sehr hohen einheitlichen Ebene muss Ihr Server:

    • Akzeptiere allgemeine Web-Anfragen
    • Polling-Anfragen akzeptieren
    • Führen Sie Hintergrundjobs aus, die Nachrichten abrufen
    • Speichern Sie diese Nachrichten irgendwo, so dass, wenn Abfrage Anfragen kommen, kann der Server für sie zu überprüfen.

    Du musst diese Polling-Anfragen auch an eine Art Session ID für den Benutzer binden, damit die richtigen Meldungen die richtige Person erreichen. Insgesamt ist das Paradigma kompliziert und meines Erachtens ineffizient.

    Web-Steckdosen

    Web-Sockets sind neu in HTML5. Die Grundidee hinter ihnen ist, dass der Client eine direkte Verbindung zum Server pflegen kann und sie können Informationen hin und her schieben . Deshalb, anstatt der üblichen: Clients sendet GET Anfrage >> Server reagiert mit Inhalt, Web-Sockets können Sie einen kontinuierlichen Dialog zu halten.

    Um dies zu beenden, benötigen Sie jedoch:

    • Browser, die WebSocket-kompatibel sind (nicht alle sind).
    • Ein Server, der Web-Sockets verarbeiten kann (nicht sicher, wie man dies artikuliert, aber nicht alle Server sind für diese Art von Arrangement eingerichtet).

    Das Setup ist etwas kompliziert, wenn auch einfacher als langes Polling:

    • Client unterhält die Verbindung zur Web-Socket-fähigen Verbindung zum Server
    • Der Server schiebt die Ergebnisse über einen Web-Socket zum Client
    • Client-Updates Seite nach Ergebnissen

    Sie sehen dieses Muster als Push-Benachrichtigungen bezeichnet (sicherlich, wenn Sie ein iPhone besitzen, das Sie dies erlebt haben), da der Server ermächtigt wurde , "Sachen" an den Client zu drücken (wie unhöflich!). Da gibt es viele Client-und Server-Nuancen, würde ich empfehlen, testen etwas wie Pusher , die im Grunde ein Web-Service, um alle harten Teile von Web-Sockets zu behandeln. Es wird ein einfacher Weg für Sie zu testen und spielen mit dem Muster vor dem Einschiffen auf die Einrichtung es selbst. Es hat sowohl Client- als auch serverseitige Bibliotheken.

    Hoffe, dass Informationen gibt Ihnen eine Grundlinie, um Ihr Problem zu lösen. Die anderen Antworten haben mehr direkte Informationen darüber, wie jedes Szenario zu lösen.

    Komet / langwillen

    Eine alternative, scheinbar Cross-Browser-Ansatz für Web-Sockets ist Long-Polling (siehe Comet ). In diesem Fall stellt Ihr Client eine Verbindung zum Server her und lässt ihn hängen und wartet darauf, dass Daten zurückgeschoben werden. Das Setup dafür ist etwas kompliziert, aber es stellt einen Mittelgrund zwischen Short Polling und Web Sockets dar .

    Ich würde vorschlagen, eine Socket-ähnliche Verbindung mit SockJS oder Socket.io als Client-Side-JavaScript-Bibliothek und dann mit Tornado auf der Server-Seite zu veröffentlichen alle Zustandsänderungen an den Client. Der Code ist ziemlich einfach.

    Der Client-Seitencode hängt davon ab, welche Bibliothek Sie wählen. SockJS oder SocketIO. Oder wenn du nur Websockets direkt benutzen möchtest, ist es ganz einfach:

     update_socket = new WebSocket("ws://my_server.com/listening_url"); update_socket.onmessage = function (evt) { $("#my_div").html(evt); }; 

    Der Server-Side-Code ist auch ganz einfach:

     import tornado class UpdateHandler(tornado.websocket.WebSocketHandler): def open(self): self.write_message('Hi client') # listen for some events that are occurring for message in function_that_generates_events(): self.write(message) def on_message(self, message): # Do something with incoming messages def on_close(self): # tidy up app = tornado.web.Application(('r/listening_url',UpdateHandler)) app.listen(9000) 

    Du könntest eine Umfrage verwenden, langwierig oder wenn du ein Push-System willst. Am einfachsten wäre eine Umfrage. Allerdings benötigen alle Lösungen eine clientseitige Codierung.

    Leistungseinfluss hängt von Ihrer Lösung ab. Einfachste zu implementieren wäre eine Umfrage. Eine Umfrage mit kurzer Frequenz wirkt effektiv eine Anfrage alle, sagen 100ms ot simulieren Echtzeit. Eine lange Umfrage wäre weniger beeinflussen, aber es würde eine Menge Aufforderung während einer mehr oder weniger Zeit offen halten.

    Anlegestelle

    Ajax Push Motor

    Socket.io

    Das sind Möglichkeiten, Comet zu implementieren

    Ich würde Socket.io empfehlen, die mit Node.js implementiert ist

    Denn es nutzt die beste verfügbare Verbindungsmethode

    Python ist die beste Programmiersprache der Welt.