2013-04-09 91 views
3

我想设置一个节点js服务器来将通知推送到我的浏览器应用程序。我有一个基本的例子工作,但我想知道如何从握手的客户端发送数据到服务器。节点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

在socket.io,信号发送的基本上是像任何其他事件处理(如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的字符串文字的显示,所以你必须做你自己的分析。

+0

谢谢,虽然加藤的其他答案正是我所期待的,但这也证明是非常有用的。 – gh123man 2013-04-09 04:09:56