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.
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Developing realtime apps with Drupal and NodeJS
1.
2. About myself
Ivo Nellis
CTO, 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
6. 1990 2000 2010
Node.js
Ruby on Rails
ASP.NET
Java
PHP
Python
Perl
Created 2009 by Ryan Dahl
7. With node, you can write
in JavaScript
or in something that compiles to JS
(CoffeeScript, ...)
8. 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
9. But SSJS has been done before..
Jaxer Rhino Ringo
Ejscript Spludo LiveWire
10. Node.js is built on
Google V8 JS engine
Fast, Single runtime = less compability
issues
13. The cost of I/O
L1-cache 3 cycles
L2-cache 14 cycles
RAM 250 cycles
Disk 41 000 000 cycles
Network 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
14. Node.js event loop
Incoming requests
I/O callback
I/O request
Single process
15. 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
16. 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");
20. Realtime communication
over HTTP is difficult
HTTP is request - response by nature
No good solutions (ajax, long polling)
21. 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/
22. 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' });
});
24. 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...
25. 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