节点socket.io将套接字传递给其他文件

时间:2015-07-16 15:06:52

标签: javascript node.js socket.io koa

我正在构建我的应用程序并简单地让我们说我有一个名为 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 ?是不是有更简单的方法?

1 个答案:

答案 0 :(得分:0)

我找到了更优雅的解决方案,满足了我: 在app.js中(为了清晰起见,我重命名为 Server.js ) 我加入了

var server = http.createServer(app.callback());
var io = socketio.listen(server);

以下内容:

exports.server = server
exports.io = io

进入io.sockets.on('connection', function(socket){ ... }我添加了exports.socket = socket

这允许我在 /methods/Rooms.js 中使用Server.js模块:

var Server = require('../Server')

以及稍后在此文件中,我只需将socket.*io.*语法更改为Server.socket.*Server.io.*