Upload
volution89
View
30
Download
3
Embed Size (px)
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"}}
Use my session save handler...
On Packagist: lboynton/memcached-json-session-save-handler
Or msgpack: https://github.com/msgpack/msgpack-php● ini_set('session.serialize_handler', 'msgpack')
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
Links
● http://nodejs.org/● https://npmjs.org/● http://socket.io/● https://packagist.
org/packages/lboynton/memcached-json-session-save-handler
● https://github.com/msgpack/msgpack-php● https://github.com/msgpack/msgpack-node