【问题标题】:User specific newsfeed socket.io and node.js用户特定的新闻源 socket.io 和 node.js
【发布时间】:2013-03-30 20:40:21
【问题描述】:

我正在尝试使用 Node.js、express 和 sockets.io 创建一个新闻源。

我的问题是socket.on("connection", function{}); 没有给你会话ID,所以我无法知道连接了哪个用户。我想知道是否有办法在会话连接时传递用户 ID。

我考虑过从客户端连接套接字,在与用户 ID 连接后立即向服务器发送消息,服务器在收到带有用户 ID 的消息后发回正确的新闻源项目。

我想知道是否有更好/更可扩展/有效的方法来做到这一点。

【问题讨论】:

  • 您好,请考虑改写您的问题,因为文字墙很难阅读。

标签: node.js sockets mongodb express feed


【解决方案1】:

如果您将授权 socket.io 请求,那么您可以过滤用户。

您必须序列化、反序列化用户对象才能使用 socket.io 访问属性

passport.serializeUser(function (user, done) {
    done(null, user.id);
});

passport.deserializeUser(function (id, done) {
    User.findById(id, function (err, user) {
        done(err, user);
    });
});

看看passportSocketIO。您可以像这样为传入的 socket.io 请求设置授权。

sio.set("authorization", passportSocketIo.authorize({
    key:    'express.sid',       //the cookie where express (or connect) stores its session id.
    secret: 'my session secret', //the session secret to parse the cookie
    store:   mySessionStore,     //the session store that express uses
    fail: function(data, accept) {     // *optional* callbacks on success or fail
      accept(null, false);             // second param takes boolean on whether or not to allow handshake
    },
    success: function(data, accept) {
      accept(null, true);
    }
  }));

然后你可以像这样在'connection'回调中过滤掉用户。

sio.sockets.on("connection", function(socket){
    console.log("user connected: ", socket.handshake.user.name);

    //filter sockets by user...
    var userProperty = socket.handshake.user.property,             //property 
        // you can use user's property here.

    //filter users with specific property
    passportSocketIo.filterSocketsByUser(sio, function (user) {
      return user.property=== propertyValue;                  //filter users with specific property
    }).forEach(function(s){
      s.send("msg");
    });

  });

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2012-05-24
    • 2011-06-06
    • 2012-04-24
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多