Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Real time notification from web server to client bowers

I am developing an appointments center web application using php+mysql. what I currently trying to do is to send notification when an appointment has been made from web server to client/user bowers without third party pushers and without using jQuery SetInterval AJAX request. I think SetInterval & AJAX is a bad approach because there would be too much traffic between the client and the server.

How can I implement notifications without polling the server with SetInterval?

like image 277
Hadi.M Avatar asked May 31 '13 14:05

Hadi.M


3 Answers

You can do this using NodeJs. NodeJS is javascript on your server that pushes content to connected clients in real time.

Its really easy to use and setup. You need a server dedicated to the real time app, I use http://nodejitsu.com.

Server Side

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, url = require('url')

app.listen(8080);

function handler (req, res) {
// parse URL
var requestURL = url.parse(req.url, true);

// if there is a message, send it
if(requestURL.query.message)
    sendMessage(decodeURI(requestURL.query.message));

// end the response
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("");
}

function sendMessage(message) {
io.sockets.emit('notification', {'message': message});
}

Client Side

<script src="socket.io.min.js"></script>
<script>
var socket = io.connect('http://localhost:8080');
socket.on('notification', function (data) {
    console.log(data.message);
});
</script>

I added the easy to use example by @intivev below to complete the answer for future readers

like image 200
MDDY Avatar answered Nov 10 '22 04:11

MDDY


You can use WebSockets for this, the Ratchet is a PHP implementation built on top of the React library. I've used both these libraries in production applications and have been more than happy with them.

Yes, using node.js is an option and maybe a better one - dependant on your current situation.

Anthony.

like image 21
Anthony Sterling Avatar answered Nov 10 '22 03:11

Anthony Sterling


I feel u are choosing the wrong language for this purpose (PHP), there may be a way out to do it in PHP , but i am damp sure that its would be a twisted one. I recommend using node.js for this purpose as using it you can accomplish pushing notifications to client in much simpler way

Server Side

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, url = require('url')

app.listen(8080);

function handler (req, res) {
// parse URL
var requestURL = url.parse(req.url, true);

// if there is a message, send it
if(requestURL.query.message)
    sendMessage(decodeURI(requestURL.query.message));

// end the response
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("");
}

function sendMessage(message) {
io.sockets.emit('notification', {'message': message});
}

Client Side

<script src="socket.io.min.js"></script>
<script>
var socket = io.connect('http://localhost:8080');
socket.on('notification', function (data) {
    console.log(data.message);
});
</script>

So you see its lot eassy if you use the suitable language for it

like image 2
intivev Avatar answered Nov 10 '22 03:11

intivev