node.js - 没有 express.js 的 Socket.io session ?

标签 node.js session express websocket socket.io

我想通过 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/

相关文章:

javascript - Node.js/express部署到不同环境

javascript - Node.JS/Passport/Sequelize - 使用错误密码登录

node.js - 在 RESTful API 的上下文中,路由和端点之间有什么区别(如果有)?

node.js - 我应该在每个模块中都要求吗?

python - tensorflow ,无法正确恢复变量

node.js - 在没有 IIS 和私钥的情况下将 Nodejs 应用程序部署到 Windows

javascript - VideoJS 分辨率选择器在 Wordpress 中不起作用

javascript - 如何导航回搜索页面?

javascript - React 前端 + Express.js Sessions

jquery - 快速解析 req.body 中的 multipart/form-data post