2013-04-09 90 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