Beibehalten einer clientseitigen Synchronisierung der Sails.js-Sammlung unter Verwendung von Sockets

8

Ich mag Meteor's Pub / Sub sehr. Ich frage mich, ob es einen Weg gibt, einen ähnlichen Arbeitsablauf zu erhalten, indem man 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.

    
demux 25.04.2015, 21:24
quelle

2 Antworten

7
  

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.

Pub / sub

Das Konzept Pub / Sub , wie von Sabbir angegeben, ist auch unterstützt von sails.js . Obwohl die Grundlagen etwas anders sind:

  • In meteor kann der Client alles abonnieren, was er will und der Server kontrolliert, was er erhält, indem er nur veröffentlicht, wen er will ;
  • Während in sails.js der Server einige Client-Sockets abonniert und für alle binded-Sockets veröffentlicht

Beachten Sie, dass standardmäßig:

Als eine serverseitige Schlussfolgerung:

  • Abonnieren: Rufen Sie einfach 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.
  • Veröffentlichen: Alle Blueprint-Standardaktionen ( 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)

>

Clientbehandlung

Daher erhalten Clients mit meteor und Segeln nur das, was sie erhalten sollen. Zeit für das Front-End jetzt.

Philosophie
  • meteor in einer Hand, mit seiner isomorphen Dimension, stellt von Natur aus einen Front-End-Connector zur Verfügung, der es ausstellt Datengebundene Sammlungen .
  • sails andererseits ist Front-end-agnostisch und kann von jedem HTTP-REST-Connector (JS oder nicht) angegriffen werden, z. B. $http , $ resource oder fortgeschrittenere wie Restangular .
    Obwohl sie sich der Komplexität bewusst sind, die rohe Sockets auf ihrer API verwendet (wenn es um Session, CORS, CSRF und so weiter geht), haben sie ein JavaScript socket.io wrapper namens sails.io.js entworfen, um REST-like-over-Socket zu sein, und funktioniert einfach wie ein Charme.

Grundsä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 wurde

Es 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 .

Bitte Code, hör auf zu reden

  

Insbesondere möchte ich in der Lage sein:

Server
  • Meteor

    %Vor%
  • Segel

    %Vor%
Klient
  • 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.

  • Nun, Segel, nur für eckige, mit Segel Ressourcen

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.

    
Cyril CHAPON 07.05.2015, 11:59
quelle
1

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 ...

einzurichten

... 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.

    
demux 04.03.2016 16:02
quelle