我正在使用session.socket.io
作为我的应用
o = require('socket.io').listen(tmpServer),
appCookieParser = express.cookieParser(settings.cookie.secret),
appRedisStore = new RedisStore(),
sessionIO = new SessionSockets(io, appRedisStore, appCookieParser
App.app.use(appCookieParser)
App.app.use(express.session({
store: appRedisStore
}))
请注意,App
是一个全局变量,它保存了我的一些应用程序数据和一些辅助函数,因为我遵循LearnAllTheNodes应用程序结构。
然后我在connection
sessionIO.on('connection', socketHandler)
其中socketHandler
是require
调用返回的函数。
module.exports = function(err, socket, session) {
console.log(io.sockets.clients('a'))
socket.join('a')
console.log(io.sockets.clients('a'))
}
根据documentation,我应该有权访问我的io
对象,但我总是收到io
未定义的错误。
请注意,如果我正在发送某些事件或在sockatHandler
中收听某些事件,我会正确地发送/发送它们。我只能访问io
。
更新
事实证明,如果我将回调函数实现为匿名函数,它将完美地运行。文档令人困惑,它应该是:如果你有参考,你可以使用io
。
答案 0 :(得分:1)
您似乎忘记定义io
这里应该是听众。
根据您显示的代码,您可能应该有类似
的内容var app = express();
var server = http.createServer(app);
var io = socketio.listen(server);
Here's an example of a complete application using express, socket.io and session.socket.io.
答案 1 :(得分:0)
为了让我的应用程序不那么拥挤,我已经更新了socketHandler
所以它需要我所有与套接字相关的对象
socketHandler(sessionIO, io)
我正在通过这些对象处理另一个模块中的套接字操作。