Developing realtime apps with Drupal and NodeJS
Upcoming SlideShare
Loading in...5
×
 

Developing realtime apps with Drupal and NodeJS

on

  • 6,722 views

Based on Google's V8 JavaScript engine, NodeJS is a fairly new platform for creating scalable and real-time web applications. I will introduce you to NodeJS internals and ecosystem as well as exaplain ...

Based on Google's V8 JavaScript engine, NodeJS is a fairly new platform for creating scalable and real-time web applications. I will introduce you to NodeJS internals and ecosystem as well as exaplain why and how you can use Node in your Drupal based projects.

Statistics

Views

Total Views
6,722
Views on SlideShare
6,709
Embed Views
13

Actions

Likes
6
Downloads
82
Comments
0

2 Embeds 13

http://www.drupalcamp.ee 7
http://drupalcamp.ee 6

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Developing realtime apps with Drupal and NodeJS Developing realtime apps with Drupal and NodeJS Presentation Transcript

  • About myselfIvo NellisCTO, Fenomen Veebiagentuur● Working with Drupal since 2007● Contributed mostly to Estonian translations● Main focus: Drupal, Node.js, MongoDB Skype: ivonellis Twitter: ivonellis ivo@fenomen.ee
  • Developing realtime apps with Node.js and Drupal Ivo Nellis Fenomen veebiagentuur
  • With Node.js, you can write web applicationsPerfect for fast, scalable, light-weight data- intensive and real-time web applications View slide
  • Node.js project is new Relatively... View slide
  • 1990 2000 2010 Node.js Ruby on Rails ASP.NET Java PHP PythonPerl Created 2009 by Ryan Dahl
  • With node, you can write in JavaScript or in something that compiles to JS (CoffeeScript, ...)
  • Server-side JavaScript is great!● JavaScript is the core of modern Web ○ A lot of existing JS developers ○ Familiarity with asynchronous programming model● Share code between client and server ○ Can use existing libraries on server side as well.● Its fast ... and its getting faster every day ○ Huge competition between browser vendors
  • But SSJS has been done before.. Jaxer Rhino RingoEjscript Spludo LiveWire
  • Node.js is built on Google V8 JS engineFast, Single runtime = less compability issues
  • Node.js is asynchronous & event driven and its great for real-time apps
  • Apache request lifecycle Incoming requests Child processes / threads
  • The cost of I/OL1-cache 3 cyclesL2-cache 14 cyclesRAM 250 cyclesDisk 41 000 000 cyclesNetwork 240 000 000 cycles http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait
  • Node.js event loop Incoming requests I/O callback I/O request Single process
  • Hello World!var http = require(http);http.createServer(function (req, res) { res.writeHead(200, {Content-Type: text/plain}); res.end(Hello Worldn);}).listen(8000); ● Node itself does not provide much ● No "standard" webserver features: ● No authentication ● No session handling ● No cookies ● No email ● No templating system ● No MVC or framework layer
  • You need to extend● Active community● Node package manager (npm) is great● 10913 packages as of 06/2012● Simple one-line installation● Manages all the dependencies for you$ npm install expressvar express = require("express");
  • express mongodb-nativeconnect socket.io redis request nodemailer jquery underscore calipso async https://github.com/joyent/node/wiki/Modules search.npmjs.org github.com
  • Node.js vs Drupal CMS Modules, themes, ... Libraries ... Calipso / etc... Framework Drupal Express.js LIB Connect.js Scripting language PHP Node.js Web Server Apache
  • Web sockets and socket.io
  • Realtime communication over HTTP is difficult HTTP is request - response by nature No good solutions (ajax, long polling)
  • Solution: Web sockets● Websocket API is a part of HTML5 spec● New protocol: ws:// & wss://● Persistant connection● Both parties can send data at any time● Native support in Chrome, Firefox, IE10● With node.js and socket.io you can use Web Sockets today http://socket.io/
  • Socket.io client & server<script src="/socket.io/socket.io.js"></script><script> var socket = io.connect(http://localhost); socket.on(news, function (data) { console.log(data); });</script>-------------------------------------------------var io = require(socket.io).listen(80);io.sockets.on(connection, function (socket) { socket.emit(news, { hello: world });});
  • Combining Drupal, Node. js and Web sockets When and how?
  • When should I consider it?● Doing it all on Apache & Drupal becomes too expensive and unscalable ○ Chat, messaging ○ Liveblog ○ Streaming data (logs, etc...) ○ API layer for a mobile app ○ Realtime widgets (sports, stocks) ○ Games ○ etc...
  • How?● A: Write your own Node server ○ Write your own module code for Drupal ○ Write your own client code● B: Build on the existing Drupal nodejs module ○ provides node.js server with socket.io support ○ provides a drupal module that integrates with it ○ focuses mainly on realtime updates http://drupal.org/project/nodejs
  • nodejs module for Drupal
  • Enables realtime communication Provides a module Drupal Client Clients Node.js & socket.io Provides a server script
  • Broadcast messages
  • Update Watchdog page realtime
  • Your custom module $message = (object) array( broadcast => TRUE, data => (object) array( subject => Hi!, body => An important message!, ), channel => my_channel, ); nodejs_enqueue_message($message);
  • And the client side implementationDrupal.nodejs.callbacks.example = { callback: function(message) { if (message.channel == "my_channel") { alert(message.data); } }}
  • Thank you!