developing realtime apps with drupal and nodejs

Post on 10-May-2015

7.815 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.

TRANSCRIPT

About myself

Ivo NellisCTO, Fenomen Veebiagentuur ● Working with Drupal since 2007● Contributed mostly to Estonian translations● Main focus: Drupal, Node.js, MongoDB

Skype: ivonellisTwitter: ivonellis

ivo@fenomen.ee

Developing realtime apps with Node.js and Drupal

Ivo NellisFenomen veebiagentuur

With Node.js, you can write web applications

Perfect for fast, scalable, light-weight data-intensive and real-time web applications

Node.js project is new Relatively...

Created 2009 by Ryan Dahl

Perl

Python

PHP

Ruby on Rails

Node.js

1990 2000 2010

ASP.NET

Java

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.

● It's fast ... and it's 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 engine

Fast, Single runtime = less compability issues

Node.js is asynchronous & event driven

and it's great for real-time apps

Apache request lifecycle

Child processes / threads

Incoming requests

The cost of I/O

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

Single process

Incoming requests

I/O request

I/O callback

Hello World!var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': text/plain'}); res.end('Hello World\n');}).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 express

var express = require("express");

expressconnect socket.io redis

mongodb-native

underscore

async

requestjquery

calipso

nodemailer

https://github.com/joyent/node/wiki/Modules

search.npmjs.org

github.com

Node.js vs Drupal

Node.js

Apache

Drupal

PHP

Web Server

Scripting language

Connect.js

Express.jsFramework

CMS

Calipso / etc...

Modules, themes, ... Libraries ...

LIB

Web socketsand socket.io

Realtime communication over HTTP is difficult

HTTP is request - response by natureNo 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

Drupal Client

Node.js & socket.io

Clients

Provides a server script

Provides a module

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!

top related