Giter VIP home page Giter VIP logo

razorframe's Introduction

#razorframe
Version
npm version
###Empowering scalable, real-time web apps in Node.js

###Visit us at: http://www.razorfra.me

##Table of Contents:

  1. Description
  2. Installation
  3. Usage: Server-Side Module
  4. Usage: Client-Side module
  5. Demo App
  6. Platform Support
  7. Dependencies
  8. Authors
  9. Feedback
  10. Support
  11. Contributions
  12. License

##Description
Razorframe is a Javascript library built on Node.js which enables developers to build a real-time client experience while maintaining scalable, async back-end operations.

Socket.io powers real-time client updates on the front-end, while Node clusters and event emitters in conjunction with a custom messaging queue process highly concurrent and asynchronous operations on the back-end.

We use a messaging queue, called razorframe, that intercepts incoming user interactions over a two-way socket channel. Those interactions are held in the queue only as long as the server needs before dequeuing. The dequeuing process then triggers an event that both updates the client UI and launches a back-end process such as a database write.

Our tests have shown this process keeps the client UI updating in sub 100ms "real-time" fashion at scale while maintaining accurate database writes.

##Installation Using npm:

$ npm i --save razorframe

##How to Use ###Server-side module:

  1. Require razorframe.
  2. Specify rzConfig object to set up server processes by declaring:
  • rzConfig.port: port where your server is listening.
  • rzConfig.cluster: true or false depending on whether you want to enable Node clusters.
    (Even though our config automatically accounts for 1 process if not specified, you'll still get better performance if you turn off Node clusters if you know you won't be using more than one CPU.)
  1. Specify dbConfig object to define your back-end callbacks.
  • dbConfig.write: 'create' function for database.
  • dbConfig.show: 'read' function for database.
  • dbConfig.update: 'update' function for database.
  • dbConfig.delete: 'delete' function for databse.
  1. Initialize razorframe while passing in http (for your server) and the configurations.
const rz = require('razorframe');

const rzConfig = {
  port: process.env.PORT || 3000,
  cluster: true
};

const dbConfig = {
  write: addToDb,
  show: showAll,
  update: null,
  delete: null,
};
 
rz.init(http, rzConfig, dbConfig);

###Client-side module: HTML
Import 2 libraries: socket.io and razorframe into your HTML.
Grab the client-side import file from our website razorfra.me or use the hosted link below:

<script src="/socket.io/socket.io.js"></script>
<script src="http://parkedwards.github.io/parkedwards.github.io/razorframe.js"></script>

Javascript
Contains 2 methods:

  1. rz.publish - publishes a data payload to a particular event and specifies a back-end callback
    Specify arguments:
  • contents: message data
  • function name (as a string): a back-end operation you want to perform as defined in dbConfig.
  • event name: name the event you can then subscribe to.
textForm.addEventListener('submit', (e) => {
  e.preventDefault();
  const contents = textInput.value;
  rz.publish(contents, 'write', 'chatMsg')
  textInput.value = '';
});
  1. rz.subscribe - listens for an event coming from the server
    Specify arguments:
  • event name: the event you want to listen for.
  • callback function: any function you want to call on the payload from the event.
rz.subscribe('dbOnLoad', (data) => {
  data.reverse().forEach(item => {
    node = document.createElement('LI');
    textNode = document.createTextNode(JSON.parse(item));
    node.appendChild(textNode);
    chatMsg.appendChild(node);
  });
});

Error Handling:
Razorframe enables error handling on the back-end if your database fails to query.
Within the error callback on your database controller, use the method:

if (err) rz.onError(MSG, 2);

where 'MSG' is the task being sent to the database and the second argument, in this case '2', specifies the number of attempts to do the query. Razorframe will re-enqueue the task 'n' number of times with a default of 2 total attempts. If the event fails to query after all attempts, a message is sent to the user that enqueued the event that the event has failed to write and will be dropped.

##Demo App Check out our demo app for more usage examples at: RZ-Demo

##Platform Node.js

##Dependencies Socket.io

##Authors
Travis Huff
Eddie Park
Michael Sotkin

##Feedback Click this Link to leave feeback. We want to hear from you! ⚡️

##Support
Tested in Chrome 55 & Node 6/7.
GitHub Issues: https://github.com/team-emt/razorframe/issues

##Contributions ❤️ Contributions welcome!
Please see out GitHub repo at: https://github.com/team-emt/razorframe

##License
MIT

razorframe's People

Contributors

msotkin avatar parkedwards avatar travishuff avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.