Stay Hungry,Stay Foolish!

meteor soul

Meteor框架

https://www.meteor.com/

 

 

 

Meteor is an ultra-simple environment for building modern web applications.

With Meteor you write apps:

  • in modern JavaScript
  • that send data over the wire, rather than HTML
  • using your choice of popular open-source libraries

   名字是流星的意思,意味着助理开发者,快速开发应用。

   同时还有数据更新很快的含义, 服务器端更新数据后,会很快的同步到所有观测此数据的所有客户端软件上。

DDP

https://github.com/meteor/meteor/blob/devel/packages/ddp/DDP.md

DDP is a protocol between a client and a server that supports two operations:

  • Remote procedure calls by the client to the server.
  • The client subscribing to a set of documents, and the server keeping the client informed about the contents of those documents as they change over time.

      meteor应用框架灵魂是其定义的一套 DDP协议(Meteor's Distributed Data Protocol),

      此协议的实现两个功能:

      1) 客户端可以调用服务器端的方法, 即支持远程调用, 一些后端的逻辑, 就可以写在前端, 打薄后端。

      2)客户端可以订阅服务器端的数据,当服务器端管理的数据改变后,所有订阅此数据的客户端都会被通知。

 

数据变更如下图, 客户端发起请求,改变服务端数据, 数据改变后,通知客户端更新数据。

 

     minimongo负责客户端数据的跟踪,正常情况会同服务器端的数据一致。

 

 

 NPM PACKAGE

ddp

https://www.npmjs.com/package/ddp

A callback style DDP (Meteor's Distributed Data Protocol) node client, originally based alansikora's node-js_ddp-client and Meteor's python client. Uses a more callback style approach.

 

客户端RPC 和 订阅。

 
  setTimeout(function () {
    /*
     * Call a Meteor Method
     */
    ddpclient.call(
      'deletePosts',             // name of Meteor Method being called
      ['foo', 'bar'],            // parameters to send to Meteor Method
      function (err, result) {   // callback which returns the method call results
        console.log('called function, result: ' + result);
      },
      function () {              // callback which fires when server has finished
        console.log('updated');  // sending any updated documents as a result of
        console.log(ddpclient.collections.posts);  // calling this method
      }
    );
  }, 3000);



  /*
   * Subscribe to a Meteor Collection
   */
  ddpclient.subscribe(
    'posts',                  // name of Meteor Publish function to subscribe to
    [],                       // any parameters used by the Publish function
    function () {             // callback when the subscription is complete
      console.log('posts complete:');
      console.log(ddpclient.collections.posts);
    }
  );
 
  /*
   * Observe a collection.
   */
  var observer = ddpclient.observe("posts");
  observer.added = function(id) {
    console.log("[ADDED] to " + observer.name + ":  " + id);
  };
  observer.changed = function(id, oldFields, clearedFields, newFields) {
    console.log("[CHANGED] in " + observer.name + ":  " + id);
    console.log("[CHANGED] old field values: ", oldFields);
    console.log("[CHANGED] cleared fields: ", clearedFields);
    console.log("[CHANGED] new fields: ", newFields);
  };
  observer.removed = function(id, oldValue) {
    console.log("[REMOVED] in " + observer.name + ":  " + id);
    console.log("[REMOVED] previous value: ", oldValue);
  };
  setTimeout(function() { observer.stop() }, 6000);
});
 

 

minimongo

https://www.npmjs.com/package/minimongo

    本地存储, mongo风格API

A client-side MongoDB implementation which supports basic queries, including some geospatial ones.

Uses code from Meteor.js minimongo package, reworked to support more geospatial queries and made npm+browserify friendly. It was forked in January 2014.

It is either IndexedDb backed (IndexedDb), WebSQL backed (WebSQLDb), Local storage backed (LocalStorageDb) or in memory only (MemoryDb).

 

 
// Require minimongo
var minimongo = require("minimongo");
 
var LocalDb = minimongo.MemoryDb;
 
// Create local db (in memory database with no backing)
db = new LocalDb();
 
// Add a collection to the database
db.addCollection("animals");
 
doc = { species: "dog", name: "Bingo" };
 
// Always use upsert for both inserts and modifies
db.animals.upsert(doc, function() {
    // Success:
 
    // Query dog (with no query options beyond a selector)
    db.animals.findOne({ species:"dog" }, {}, function(res) {
        console.log("Dog's name is: " + res.name);
    });
});

 

posted @ 2020-02-02 23:15  lightsong  阅读(174)  评论(0编辑  收藏  举报
Life Is Short, We Need Ship To Travel