3

我正在尝试设置一个节点 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
  });
4

2 回答 2

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部分。

于 2013-04-09T03:42:47.650 回答
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 的字符串文字表示,因此您必须自己进行解析。

于 2013-04-09T04:06:49.017 回答