【发布时间】:2015-10-06 02:56:17
【问题描述】:
我正在构建我的应用程序,为了简单起见,假设我有一个名为 app.js 的主文件和一个名为 Rooms.js 的文件,我想在其中拥有处理socket.io房间等的所有功能。
在 app.js 中加载我的模块:
var Rooms = require("./methods/Rooms")
Rooms.Rooms(io, socket);
在 /methods/Rooms.js:
exports.Rooms = function(io, socket) {
/* This function works as a "controller" to Rooms module */
(... some code here ...)
if (usersJoined == usersToStartGame) {
startGame(roomid, io, socket)
}
}
function startGame(roomid, io, socket) {
io.to(roomid).emit('startGame')
(... other stuff ...)
确实有效,但我觉得我做错了什么。
我真的需要在每次创建新函数时传递 io 和 socket 吗?没有更简单的方法吗?
【问题讨论】:
-
为什么不传递一次 io 并将其保存在 Rooms.js 中的一个变量中(或者可能与您的应用程序的上下文共享一个更大的对象)?您还可以有一个工厂(或原型对象)来包装套接字(这就是我所做的)。
-
在这种情况下
socket是什么?我以为是io,但通常socket指的是单个连接。如果它是单个连接,则传递它可能是唯一的选择。另一方面,io可以抽象为它自己的模块,在需要的地方得到需要。
标签: javascript node.js socket.io koa