我想通过 node.js 和 socket.io 对 websockets 进行 session 处理不一定使用 cookie 并避免使用 express.js,因为还应该有不在浏览器环境中运行的客户端。有人已经这样做了,或者在概念验证方面有一些经验?
最佳答案
在socket.io连接建立之前,有一个握手机制,默认情况下,所有正确传入的请求都会成功握手。然而,有一种方法可以在握手期间获取套接字数据,并根据您的选择返回真或假,即接受或拒绝传入的连接请求。这是来自 socket.io 文档的示例:
Because the handshakeData is stored after the authorization you can actually add or remove data from this object.
var io = require('socket.io').listen(80);
io.configure(function (){
io.set('authorization', function (handshakeData, callback) {
// findDatabyip is an async example function
findDatabyIP(handshakeData.address.address, function (err, data) {
if (err) return callback(err);
if (data.authorized) {
handshakeData.foo = 'bar';
for(var prop in data) handshakeData[prop] = data[prop];
callback(null, true);
} else {
callback(null, false);
}
})
});
});
callback函数的第一个参数是error,这里可以提供一个字符串,不设置为null会自动拒绝客户端。第二个参数是 bool 值,是否要接受传入请求。
关于node.js - 没有 express.js 的 Socket.io session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122783/