Node JS推送服务器发送/接收

时间:2013-04-09 03:30:38

标签: javascript jquery node.js socket.io

我正在尝试设置节点js服务器来向我的浏览器应用程序执行推送通知。我有一个基本的例子,但我想知道如何在握手时从客户端向服务器发送数据。

我需要向服务器发送类似用户ID的内容,因此当收到通知时,可以将其路由回用户。

我的服务器看起来像这样

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" );
});

我的客户看起来像这样

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

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

2 个答案:

答案 0 :(得分:4)

在socket.io中,emit基本上与任何其他事件处理程序一样(例如jQuery的.on('click'...));您声明事件并发送数据。在服务器上,添加.on('event', ...)以捕获请求并处理它。

socket.io首页显示了服务器的这个示例:

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);
  });
});

这对于客户来说:

<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>

听起来你正在寻找的部分是socket.emit部分。

答案 1 :(得分:2)

我过去通过在客户端设置cookie(你可能正在做的事情),然后使用socket.io的authorization事件来完成这类事情。您可以使用此事件来决定是否首先接受与用户的套接字连接。

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);
  });
});

请在此处查看更多文档:https://github.com/LearnBoost/socket.io/wiki/Authorizing

请注意,handshakeData.headers.cookie只是cookie的字符串文字表示,因此您必须自己进行解析。