2012-04-11 7 views
12

Meteor Framework screencast angesehen. Ich habe festgestellt, dass das Ändern der Datenbank nahtlos die Daten im Browser ändert. Normalerweise lädt AJAX alle paar Sekunden einen Teil der Seite neu, aber ich habe nicht bemerkt, dass der Browser neu geladen wurde. Wie haben sie das in Meteor erreicht? Ist es Node.js abhängig?Wie aktualisiert der Meteor den Browser?

UPDATE: Toby Catlin stellt eine weitere interessante Frage. Wie geht Meteor mit verschiedenen Browsern um?

+0

Siehe auch [Hot Code schiebt] (http://meteor.com/blog/2012/02/09/hot-code-pushes) –

Antwort

5

Es gibt ein paar Techniken, die es dem Server ermöglichen, Daten in den Browser zu pushen, ohne dass der Browser dies anfordern muss. Der Begriff für diese Technologie ist Comet [wikipedia.org] und die meisten Techniken beziehen sich auf AJAX (es gab einen Bleichmittel namens Comet und ein Reinigungsmittel namens Ajax). Es gibt eine Reihe von Verbindungstypen: Long Polling, Streaming XHR, Forever Frame, Server-Sende-Events und Websockets. Socket.IO ist eine nette Bibliothek, die Verbindungstypen zu Streaming-Servern bereitstellt.

Sie benötigen einen Server, der Comet-Verbindungen unterstützt. Sie können google für aktuelle, aber aus der Spitze meines Kopfes: node.js, Tornado, Cometd, orbited, Jetty Streaming

Ich würde vermuten, dass Metor würde verschiedene Verbindungstypen abhängig von den Fähigkeiten des Browsers, z. B. Websocket für Chrome und lange Polling für IE. Wenn jemand eine spezifischere Antwort geben kann, würde ich mich interessieren

+0

Mit WebSockets Sie nicht brauchen, Browser muss Daten anfordern, da eine ständige Verbindung zwischen Browser und Server besteht. Der Server kann Daten an den Client senden, solange sie verbunden sind. – moka

+0

Wenn es Socket IO verwendet, glaube ich, dass es auf lange Abfragen für alte Browser zurückgreifen wird. Für neue würde es einen WebSocket öffnen – climboid

+0

Comet wird jetzt von W3C als Server Sent Events (SSE) bekannt. Siehe: http://stackoverflow.com/questions/1964494/how-to-make-all-connected-browsers-reload-initiated-by-a-server-side-event –

17

Sie verwenden beide Session und Meteor.autosubscribe (von Meteor API), um sicherzustellen, dass Änderungen auf den Clients widergespiegelt werden.

Diese Meteor-APIs verwenden XHR (XMLHttpRequest) von SockJS. SockJS ist das WebSocket-Emulationsprogramm. Wenn sich also etwas auf dem Server ändert, stellt SockJS sicher, dass ein XHR gesendet wird, und die geänderten Daten befinden sich in der JSON-Antwort.

Ja, Meteor ist vollständig abhängig von Node.js. Aus der Meteor-Dokumentation:

Ein Meteor-Anwendung ist eine Mischung aus JavaScript, die in einem Client-Webbrowser ausgeführt wird, JavaScript, das in einem Node.js Container auf dem Meteor-Server läuft, und alle unterstützen HTML-Fragmente, CSS-Regeln und statische Assets. Meteor automatisiert die Verpackung und Übertragung dieser verschiedenen Komponenten. Und es ist ziemlich flexibel, wie Sie diese Komponenten in Ihrer Dateistruktur strukturieren.

Das einzige Server-Asset ist JavaScript. Meteor sammelt alle Ihre JavaScript-Dateien, schließt alles unter den Unterverzeichnissen client und public aus und lädt sie in eine Node.js-Serverinstanz in einer Glasfaser. In Meteor läuft Ihr Server-Code in einem einzelnen Thread pro Anfrage und nicht im asynchronen Callback-Stil, der für Node typisch ist. Wir finden das lineare Ausführungsmodell besser für den typischen Servercode in einer Meteor-Anwendung.

Quellen: http://docs.meteor.com/ und https://github.com/meteor/meteor

Verwandte Themen