Ich mag Meteor's Pub / Sub sehr. Ich frage mich, ob es einen Weg gibt, einen ähnlichen Arbeitsablauf zu erhalten, indem man Segel verwendet. js oder nur eine Socket-Bibliothek im Allgemeinen.
Insbesondere möchte ich in der Lage sein:
%Vor%Die Interaktion mit dem Server sollte im Hintergrund stattfinden.
Ich mag Meteor's Pub / Sub sehr. Ich frage mich, ob es einen Weg gibt, einen ähnlichen Arbeitsablauf zu erhalten, indem ich sails.js oder nur eine Socket-Bibliothek im Allgemeinen benutze
Grundsätzlich ja , zumindest über Echtzeit-Synchronisation zwischen Backend und Frontend. Lassen Sie uns überprüfen, was Meteore haben und Punkt für Punkt beantworten.
Das Konzept Pub / Sub , wie von Sabbir angegeben, ist auch unterstützt von sails.js . Obwohl die Grundlagen etwas anders sind:
Beachten Sie, dass standardmäßig:
meteor remove autopublish
, dann kannst du damit umgehen, was dein Kunde erhält, indem du ihm eine Mongo-Anfrage hinzufügst, wie erklärt hier . Als eine serverseitige Schlussfolgerung:
find
oder findOne
blueprint default action über einen Socket auf (fügen Sie einige where
filters hinzu oder nicht) und Ihr Socket wird automatisch für alle Ereignisse bezüglich zurückgegebener Objekte subskribiert = & gt; Sie müssen in den meisten Fällen nichts auf dem Server für die Subscribe
-Logik codieren. create
, update
, destroy
, add
, remove
) veröffentlichen automatisch auf abonnierte Sockets = & gt; Sie müssen in den meisten Fällen nichts auf dem Server für die Publish
-Logik codieren. (Wenn Sie jedoch feststellen, dass Sie einige manuelle Controller-Aktionen implementieren, hilft Ihnen die API sails veröffentlichen ing und abonnieren einfach)
>Daher erhalten Clients mit meteor und Segeln nur das, was sie erhalten sollen. Zeit für das Front-End jetzt.
PhilosophieGrundsätzlich besteht der Hauptunterschied darin, dass meteor einen Schritt höher als Segel ist, da er die Logik der Synchronisierung Sammlungen und Objekte.
Die Interaktion mit dem Server sollte im Hintergrund stattfinden.
sails.io.js , die offizielle Frontend-Komponente, ist einfach nicht das High-Level. Wenn es um Angular.js geht.
Sie können jedoch einige Community-Connectors finden, die auf dieselbe Art wie Mongo-Daten gebundene Sammlungen und Objekte bereitstellen. Es gibt Segel-Ressource , Spinnaker oder eckige Ressourcensegel . Ich habe beide ausprobiert, und ich sollte sagen, dass ich enttäuscht war. Das Abstraktionslevel ist so hoch, dass es einfach nervt, IMHO. Zum Beispiel, mit nicht-sehr RESTful-freundliche benutzerdefinierte Aktionen, wie ein login
, wird es sehr schwierig, es für Ihre Bedürfnisse anzupassen .
== & gt; Ich würde empfehlen, einen Low-Level-Connector zu verwenden, wie angularSails oder (mein bevorzugtes) https://github.com/janpantel / angular-sails, oder auch rohe sails.io.js, wenn du Angular nicht benutzt.
Bearbeiten: Erstellen Sie einfach eine Backbone-Version , die vom Segelersteller
erstellt wurdeEs funktioniert einfach großartig, und glauben Sie mir, die " behalten meine Sammlung mit diesem Socket " Code synchronisiert ist so lächerlich, dass ein Modul dafür zu finden ist es einfach nicht wert .
ServerInsbesondere möchte ich in der Lage sein:
Meteor
%Vor%Segel
%Vor%Meteor
%Vor%Segel, mit sails.io.js (Hier zur Vereinfachung lodash )
%Vor% (Ich belasse die find
wo und create
Ihrer Vorstellung mit [dem Dokument])
Die Interaktion mit dem Server sollte im Hintergrund stattfinden.
Ich bin nicht an diesen Prozess gewöhnt, also lasse ich Sie hier lesen > oder hier , aber ich würde wieder die manuelle Methode .on()
wählen.
Seit ich diese Frage gestellt habe, habe ich ein paar Dinge gelernt und einige neue Projekte sind aufgetaucht. Ich habe mich gegen sails.io
entschieden, weil bei der Entwicklung mit React.js
der Großteil der Community hinter webpack
steht, aber sails.io
verwendet gulp
. Ich weiß, dass diese zusammen verwendet werden können, und es gibt sogar ein NPM-Paket dafür, aber ich war nicht so scharf darauf, meinen Stack größer zu machen, als es sein musste, also ging ich mit einem einfachen express.js
-Server, den ich anpassen konnte meine Bedürfnisse.
Um meine Daten zu synchronisieren, verwende ich rethinkdb
, was mir erlaubt, die Datenbank asynchron nach Änderungen zu beobachten und dann die Änderungen über websockets
an die Clients zu veröffentlichen.
Ich habe ein einfaches Skript eingerichtet, in dem ich eine Instanz von baobab
tree sowohl auf dem Client als auch auf dem Server verwalte.
Wenn der Baum auf dem Server geändert wird, sendet er Transaktionsdaten an die entsprechenden Clients das websocket
Der Client führt die Transaktion mit der Struktur zusammen.
Diese Methode verwendet local storage
nicht und behält die Daten im Prozess node.js
im Speicher. Die Daten in transaction
sind ebenfalls ziemlich redundant.
Der Zukunftsplan war immer etwas mit redis
und local storage
...
... bis gestern, als ich deepstream.io
fand!
Dies ist ein Werkzeug, das genau das tut, was ich will und brauche! Nicht mehr und nicht weniger.
Ein anderes erwähnenswertes Projekt ist fleischiger : "wie Meteor, aber fleischiger". Es besteht aus vielen anderen gut unterstützten Open-Source-Projekten, so dass Sie sogar wählen und wählen können.
Tags und Links javascript node.js socket.io sails.js sails.io.js