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

Posted

技术标签:

【中文标题】Node JS 推送服务器发送/接收【英文标题】:Node JS push server send/receive 【发布时间】:2013-03-31 08:14:07 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案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 的字符串文字表示,因此您必须自己进行解析。

【讨论】:

谢谢,虽然 Kato 的另一个答案正是我想要的,但事实证明这也很有帮助。

以上是关于Node JS 推送服务器发送/接收的主要内容,如果未能解决你的问题,请参考以下文章

使用 socket.io 技术实现消息实时推送

通过 Azure 从 node.js 发送推送通知

在禁用客户端推送的情况下,有啥方法可以在 Node.js 上使用 Parse 发送推送?

node.js Web实时消息后台服务器推送技术---GoEasy

如何在 Node JS 中使用 Amazon SNS 向 iOS 设备发送 VoIP 推送通知

如何在 MobileFirst Foundation 8 中使用 REST API 从 Node.js 发送推送通知?