我正在尝试设置节点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
});
答案 0 :(得分: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
部分。
答案 1 :(得分: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的字符串文字表示,因此您必须自己进行解析。