bringing interactivity to your drupal site with node.js integration
DESCRIPTION
Drupal is a powerful, flexible platform for building applications, but not something that handles realtime notifications easily. Node.js is a breath of fresh air in the Open Source web server landscape. It makes writing applications that handle thousands of open connections at the same time easily.The Nodejs module integrates Drupal with Node.js, allowing for the best of both worlds. Realtime chat, push notifications and help desk functionality can all be easily added to your Drupal site via the Nodejs module, without the usual scalability and performance issues associated with these technologies on the LAMP stack.TRANSCRIPT
Bring real-time interactivity to Drupal with Node.js
Howard Tyson, senior developer, ZivtechKieran Lal, technical director, enterprise sales
Upcoming Webinars
• Drupal in the Trenches: Solving Real World Problems
• Five websites you can launch on Dev Cloud without Coding
• Selecting the Right Solution to Build your Online Developer Community
• Easy Drupal Hosting Lifecycle
• From PSD to Drupal Theme
• Four Open Source Drupal Applications for Higher Ed
http://acquia.com/resources/webinars
Upcoming Node.js Webinars
• Lessons learned integrating Drupal with Node.js and MongoDB powered Web Services
• Lior Kesos, Swifto, founder Linnovate
• November 9th, 2011
http://acquia.com/resources/webinars
Howard Tyson
• Howard Tyson, Senior Developer at Zivtech
• Developing Drupal powered websites since 2006.
• Howard contributes to Drupal and co-‐maintains the Nodejs module, Version Control API among others.
• Version control powers Git repository on Drupal.org which has added 6000 more developers since Jan, 2011
Node.js & DrupalDrupal in realtime via Node.js
WhoWho am I?
Howard Tyson
•Drupal.org, twitter, IRC: tizzo
•Senior Developer at Zivtech
•Drupal & systems architect, trainer
Zivtech
•Drupal experts
•Open source enthusiasts (node.js, Alfresco, Zend, Python, etc).
•Excellent web/mobile design team
•Offer public and private trainings focused on turning smart people into excellent developers
WhatWhat is Node.js everyone is talking about,
anyway?
Node.js
•Javascript on the server
•Based on Google’s V8 engine
•Event driven
•Asynchronous I/O performed by libraries
Architecture
node standard library
JavaScript C/C++
node bindings provided by modules(socket, http, etc)
thread pool
your code
Architecture
•A single process runs the main event loop and maintains all connections
•Tasks are performed asynchronously by workers in a thread pool managed by a library leaving the main event loop free to handle other requests
Node.js hello world
•Writing a web server was never so easy!
WhyWe already have Apache, why is this helpful?
Why we care about realtime?
•Users expect more and more (they see it on Facebook, Twitter, Google, etc. every day)
•Great for mobile
•Bridge the native app gap
A Use Case• Dignio
• A service for improving life for patience needing additional care but not assisted living
• Realtime webapp for call center employees, patients
Apache’s Shortcomings
• One thread (usually one process) per connection
• Memory heavy processes (for Drupal especially)
• Persistent and concurrent connections are
Node.js is good for...
• Concurrency!
• Asynchronous I/O
• Low overhead for open connections
• Light weight servers
• Networking applications
Node.js is good for...
•Backend workers or serving clients
•Node.js has a vibrant community writing extensions (often you just need to write some glue, sound familiar?)
•Wherever Drupal’s power comes at too high a price
HowHow do we use node.js with Drupal?
Integarting with node.js
•Write your own node.js server
•if you know javascript, it’s not so hard!
•Use drupal’s node.js module for realtime communications
The Node.js module
•The node.js module on Drupal.org
•http://drupal.org/project/nodejs
•Focused on realtime updates for Drupal
•Provides a node.js server and a Drupal module that integrates with it
Realtime?
•Until now, when a client opens a page they don’t see updates until the next time they refresh the page
•Our module can push content to someone while they view the page
1. Normal Drupal Page Load
(with auth token)
3. Node.js sends auth token to
Drupal
2. Connection requested by
socket.io using auth token
4. Drupal returns a list of channels for
the user
5. Node.js notifies client that auth is
successful
Authentication
1. Normal Drupal Page Load
(with auth token)
2. Node.js remembers the authenticated
token, authenticating the user without a
need to query Drupal again
Subsequent pages
Client Apache / Nginx
Node.js
Client requests Drupal page
Drupal sends down HTML with JS token
Client sends auth token to Node.js
Node.js verifies token with Drupal
Drupal sends appropriate
channels for the user
Subsequent connections do not hit Drupal
Node.js notifies the client of
successful auth
Node.js ServerWeb browser Apache Server
WhereWhere can my code hook in to leverage
Node.js?
PHP
JavaScript
Add a user to a channel
Message only the channel
WhenAre we getting new features?
What’s coming
•Version 1.0 is right around the corner
•we’re on beta5
•Chatroom is undergoing a refactor to rely on a push capable backend (like node.js)
New Features
•Content channels (recently landed)
•Views integration
•Generic entity updating
•Your module here...
Call to action!
•We need:
•Contributors!
•Documentation writers!
•Testers!
•http://drupal.org/project/nodejs
•http://drupal.org/project/chatroom
DemoLet’s see it in action!
Questions
• For more information visit: http://www.acquia.com
• Follow us: http://www.twitter.com/acquia
• Contact us: [email protected] or 888.9.ACQUIA
• Howard Tyson [email protected]
• Kieran Lal, [email protected], 415-‐992-‐8124
• follow: amazonk
Today’s webinar recording will be posted to:http://acquia.com/resources/recorded_webinars