integrating node-js with php

Download Integrating Node-Js with PHP

Post on 14-Dec-2015

11 views

Category:

Documents

3 download

Embed Size (px)

DESCRIPTION

Integrating Node-Js with PHPLee BoyntonPHPHants March 2013 Meetup

TRANSCRIPT

  • 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