node.js running alongside Apache PHP?

wilsonpage picture wilsonpage · Jan 9, 2011 · Viewed 11.3k times · Source

I am trying to get my head round node.js...

I am very happy with my LAMP set up as it currently fulfils my requirements. Although I want to add some real-time features into my PHP app. Such as showing all users currently logged into my site and possible chat features.

I don't want to replace my PHP backend, but I do want scalable real-time solutions.

1. Can I throw node.js into the mix to serve my needs without rebuilding the whole application server-side script?

2. How best could node.js serve my 'chat' and 'currently logged in' features?

Great to hear your views!

W.

Answer

Kit picture Kit · Feb 16, 2011

I suggest you use Socket.io along side node.js. Install and download the libs from http://socket.io/. You can run it along side your Apache server no problems.

First create a node server:

var http = require('http')
  , url = require('url')
  , fs = require('fs')
  , io = require('../')//path to your socket.io lib
  , sys = require(process.binding('natives').util ? 'util' : 'sys')
  , server;

server = http.createServer(function(req, res){
  var path = url.parse(req.url).pathname;
}),

server.listen(8084);//This could be almost any port number

Second, run your server from the command line using:

node /path/to/your/server.js

Third, connect to the socket using client side js:

var socket = new io.Socket(null, {port: 8084, rememberTransport: false});
socket.connect();

You will have to have include the socket.io lib client side aswell.

Send data from client side to the node server using:

socket.send({data:data});

Your server.js should also have functions for processing requests:

io.on('connection', function(client){
//action when client connets

 client.on('message', function(message){
    //action when client sends msg
  });

  client.on('disconnect', function(){
    //action when client disconnects
  });
});

There are two main ways to send data from the server to the client:

client.send({ data: data});//sends it back to the client making the request

and

client.broadcast({  data: data});//sends it too every client connected to the server