Meteor.js
Meteor is an open-source Isomorphic Development Ecosystem (IDevE) for building real-time web and mobile applications. It's a collection of components (such as frameworks, libraries, configuration tools, and databases, and more) and JavaScript-based technologies (MEAN – MongoDB, Express.js, Angular.js, and Node.js) that developers would need in building an app right from the scratch to deployment and the stages in-between.
It uses the Distributed Data Protocol (DDP) and the publish-subscribe messaging pattern which enable developers to propagate data changes to clients without writing any synchronization code. It also allows developers to create realtime applications entirely in one language (JavaScript) in all environments: application server, web browser, and mobile device. Meteor is written using Node.js and uses MongoDB as its core application code, eliminating the need to look for a database to use.
How did Meteor come about?
Meteor was founded by Matt DeBergalis (co-founder of ActBlue), Nick Martin (co-founder of MixApp), and Geoff Schmidt (co-founder of early Asana employee/MixApp). The first preview release of this JavaScript framework was announced on December 1, 2011, by the Meteor Development Group (MDG) under the name Skybreak. On January 20, 2012, the framework got its name changed to Meteor and officially launched as a free and open-source for creating Google Docs style applications in the browser.
In July 2012, the project had received $11.2 million in investment from Andreessen Horowitz. Meteor's project also raised an additional $20M in Series B funding from other big names in the startup world including Matrix Partners, Andreessen Horowitz, Peter Levine (former CEO of XenSource), Dustin Moskovitz (Facebook co-founder), and Rod Johnson (SpringSource founder). Meteor used the large amounts of venture capital received in its Series B funding round to acquire and integrate several startups including FathomDB (a cloud database startup), Galaxy (a cloud platform to run and manage meteor application), and Kadira (a performance monitoring solution) into its core product.
Today, Meteor is used by Accenture, Shelf, Rocket Chat, Digital Services, Deloitte, Nordstrom, Esri, and Medicus AI, among others.
How does Meteor work?
To better understand how Meteor works, you have to be familiar with the following important concepts:
Blaze: the Meteor's built-in reactive UI library. It's used to build live reactive templates, and one of its components is the templating language Spacebars.
Tracker: this component enables reactive programming. It provides the fundamentals of functional reactive programming (FRP) that reruns computations when data changes. The Tracker connects reactive data sources (such as data from the database) to the data consumer.
Distributed Data Protocol (DPP): the protocol used for passing data over WebSockets between server and client in both directions. It's a client-server protocol for querying and updating a server-side database, sending the result down to the client, and then propagating changes to the client each time there are changes in the database.
Livequery: the component that detects changes initiated by one client in the database and then pushes them out to all the clients currently viewing affected data.
Figure 1: Communication between the server and client
Meteor communicates over both HTTP and WebSockets, as shown in the figure above. The initial page request and all static resources including images, fonts, styles, and JavaScript files are transferred via HTTP, while the applications running on client and server use the DPP protocol to exchange data. SockJS provides the necessary infrastructure to handle all WebSocket connections in Meteor. The client calls methods on the server using remote procedure calls (RPC). Clients call server functions via DDP over WebSockets, and the server sends back its responses as JavaScript Object Notation (JSON) objects. Also, each client may subscribe to specific data publications and rely on the Meteor's Livequery component to detect and push out any changes in the database to all subscribed clients over DDP as well. The reactive Tracker library looks out for those changes and activates document object model (DOM) updates in the UI layer through Blaze.
Technical Overview of Meteor
Meteor offers isomorphic APIs that support communication between frontend and backend to enable developers to handle both client-server management and server-session management. With Meteor, client-server data communication takes place automatically without the need to write any boilerplate code.
Meteor allows for same code (Isomorphic JavaScript) on the frontend and the backend for mobile and web applications. This way, developers don't need to install and configure different libraries, module managers, APIs, drivers, and more.
Meteor offers developers a combination of frontend and backend components (frameworks, libraries, configuration tools, database, and more) that might be required for the entire development lifecycle of an app. Meteor also features several built-in packages such as reactive templates, automatic CSS and JS minification on its production server, and hot code reload. It also integrates with Galaxy, a cloud platform for deploying, scaling, and monitoring client applications.
Meteor comes with a built-in package that takes care of pre-processing and custom user authentication for platforms such as Email, Facebook, Twitter, Google, and more. It also offers requisite packages for frameworks like Backbone.js, Bootstrap, and jQuery.
Meteor Pros:
Open-source JavaScript framework with isomorphic concepts
Isomorphic JavaScript code
Full-stack reactivity
Integrated frontend library
Seamless data communication between client and server
Extensive development ecosystem
Meteor Cons:
Read more…
Recommended Articles
Java and WebSockets: Building dependable realtime apps
Learn how to build dependable realtime apps that scale with Java and WebSockets, and the challenges associated with this.
WebSockets and tvOS apps: client-side engineering aspects you need to consider
Learn about the many challenges of implementing a dependable client-side WebSocket solution for tvOS.
Using WebSockets for iPadOS apps: hard engineering challenges
Learn about the many challenges of implementing a dependable client-side WebSocket solution for iPadOS.