gh123man
gh123man

Reputation: 1414

Node JS push server send/receive

I am trying to set up a node js server to do push notifications to my browser app. I have a basic example working, but I am wondering how to send data up to the server from the client on handshake.

I Need to send to the server something like a user id, so when a notification comes in for them, it can be routed back to the user.

my server looks something like this

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

app.listen(8000);

function handler ( req, res ) {
    res.writeHead( 200 );
    res.end('node working');
};

io.sockets.on( 'connection', function ( socket ) {

  socket.volatile.emit( 'notification' , "blah" );
});

and my client looks something like this

 var socket = io.connect('http://localhost:8000');

  socket.on('notification', function (data) {
    //prints data here
  });

Upvotes: 3

Views: 5755

Answers (2)

Bret Copeland
Bret Copeland

Reputation: 24080

I have done this sort of thing in the past by setting a cookie on the client (which you're probably doing anyway), and then using socket.io's authorization event. You can use this event to decide whether to even accept the socket connection to the user in the first place.

io.configure(function () {
  io.set('authorization', function (handshakeData, callback) {

    var cookie = handshakeData.headers.cookie;

    // parse the cookie to get user data...

    // second argument to the callback decides whether to authorize the client
    callback(null, true);
  });
});

See more documentation here: https://github.com/LearnBoost/socket.io/wiki/Authorizing

Note that handshakeData.headers.cookie is just a string literal representation of the cookie, so you'll have to do your own parsing.

Upvotes: 2

Kato
Kato

Reputation: 40582

In socket.io, the emit is essentially like any other event handler (e.g. jQuery's .on('click'...)); you declare the event and send the data. On the server, you add the .on('event', ...) to catch the request and process it.

The socket.io front page shows this example for the server:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

And this for the client:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

It sounds like the part you're looking for is the socket.emit portion.

Upvotes: 4

Related Questions