【问题标题】:How to get event details in middleware for socket.io如何在 socket.io 的中间件中获取事件详细信息
【发布时间】:2015-10-01 08:30:28
【问题描述】:

我正在尝试为我的节点服务器上的每个事件记录 event nameparameter。为此我使用了

io.use(function(socket, next){
  // how to get event name out of socket.
});

现在,我在尝试获取事件名称和参数时卡住了。对我来说,这似乎是 API 开发人员的普遍需求,所以我很确定库必须有某种方法来获得它,我试图阅读文档和源代码,但我无法获得这些东西。

【问题讨论】:

  • 您是否尝试过使用util.inspect 打印socket 的属性以查看是否有包含您需要的数据的属性?这可能需要一些工作,但如果它不在文档中,这是找到正确属性的最佳方法。
  • 我试图检查socket.request,但没有检查socket本身。
  • 我也想知道这一点。我使用recursive-iterator 递归地遍历socket 对象中的所有属性,但找不到该事件的字符串"connection"。在 socket.io 源代码中有一个ondecoded,它使用 id/message 调用onpacket。而use 中间件似乎并没有参与其中(事实上它似乎发生在这一切之前)所以这可能就是为什么这里没有这个细节。如果有人能对此提供更权威的答案,我将不胜感激..

标签: node.js logging socket.io


【解决方案1】:

socket事件需要妥善处理,任何情况下如果一个事件没有处理就没有响应。

var io = require('socket.io')(server);
var sessionMiddleWare=(session({secret: 'secret key', resave: true, saveUninitialized: true,cookie: { path: '/', httpOnly: true, maxAge: 300000 },rolling: true}));

app.use(sessionMiddleWare)

io.use(function(socket, next) {
  sessionMiddleWare(socket.request, socket.request.res, next);
});

io.on('connection', function(socket) {  // On Socket connection.
   // inside this you can use different events

   //event name and parameters can be found in socket variable.

   console.log(socket.id) // prints the id sent from the client.
   console.log(socket.data) // prints the data sent from the client.

   // example event

   socket.on('subscribe', function(room) {  // Event sample.
        console.log('joining room', room);
        socket.room=room;
        socket.join(room);
    });
})

希望这会有所帮助。

【讨论】:

  • 这是因为它的当前代码不能记录每个事件,只能记录connection
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2010-09-27
相关资源
最近更新 更多