Integrating Node-Js with PHP

Preview:

DESCRIPTION

Integrating Node-Js with PHPLee BoyntonPHPHants March 2013 Meetup

Citation preview

Integrating Node.js with PHP

Lee BoyntonPHPHants March 2013 Meetup

So... WTF is Node.js?

Server-side JavaScript

It's single threaded...

...one process serves multiple clients

Apache + mod_phpWebserverClients

(Example borrowed from Marc Gear's excellent server side scripting smack down)

nginx + php-fpmStill pretty similar, there is a pool of available

PHP processes

Node.jsWebserverClients

A simple Node.js webserver

var http = require('http');http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n');}).listen(1337, '127.0.0.1');console.log('Server running at http://127.0.0.1:1337/');

Why should I use Node.js then?

l33tness

#1 Reason

Use same language on the frontend and

backend!

Websockets!!!!

● Persistent connection to server via web browser

● Low latency● Bi-directional● Much better than XHR long polling (comet)

Websockets

● Games● News feeds● Chat● Real-time applications

The possibilities...

Awesome! Let's ditch PHP!

Or use the right tool for the right job...

● PHP works● Familiarity, maturity● Existing code in PHP● Node still in its infancy (created in 2009)

○ Not as many frameworks, libraries○ May have to write more code for some basic things○ APIs may change, not version 1.0 yet

Reasons to use PHP still

Oh yeah, the integrating part...

Memcache/redis/something else

PHP Node

Session dataSession data

However...

Sessions are serialized by PHP:not|a:2:{i:0;s:4:"easy";i:1;a:1:{s:2:"to";s:5:"parse";}}

Easier to parse JSON in Node.js:{"this": {"is": "easier"}}

Quick example... (PHP)// create connection to memcached$memcached = new Memcached();$memcached->addServer('localhost', 11211);

// register handler (PHP 5.3 compatible)$handler = new Lboy\Session\SaveHandler($memcached);

session_set_save_handler( array($handler, 'open'), array($handler, 'close'), array($handler, 'read'), array($handler, 'write'), array($handler, 'destroy'), array($handler, 'gc'));

register_shutdown_function('session_write_close');session_start();

// start using the session$_SESSION['serialisation'] = 'this should be in json';

Quick example... (Node.js)

1. Get session ID from cookie2. Get session data out of memcached3. Use session data to identify client and send

relevant info to their browser

See demo app...

Conclusion...

● Using Node is fun...● Good way to add real-time functionality to

existing website● Can be used for much more

Recommended