2013-04-09 2 views
3

Я пытаюсь настроить узел js-сервера, чтобы делать push-уведомления в моем приложении-браузере. У меня есть основной пример работы, но мне интересно, как отправлять данные на сервер с клиента в рукопожатии.Узел JS push server send/receive

Мне нужно отправить серверу что-то вроде идентификатора пользователя, поэтому, когда к ним приходит уведомление, его можно перенаправить к пользователю.

мой сервер выглядит как этот

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 на клиенте (который вы, вероятно, все равно делаете), а затем с помощью события socket0io 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 является просто строковым представлением куки, так что вам придется сделать свой собственный синтаксический.

+0

Спасибо, хотя другой ответ Като - именно то, что я искал, это тоже будет очень полезно. – gh123man

Смежные вопросы