NodeJS使用socket.io为套接字动态加载服务器实例



我有下一个文件结构:

app.js - Server
data
    |__ config.txt   -  configuration
    |__ logs
srv
    |__ ticket.js    - ticket server
    |__ game.js      - game server

app.js从"config.txt"读取服务器以加载并运行

config.txt

port=7891
servers=ticket

服务器也可以是:服务器=门票,游戏

ticket.js

var init = function(io) {
    return io.of('/ticket')
    .on('connection', function (socket) {
        socket.on('message', function () { 
        });
        socket.on('disconnect', function () { 
        });
    });
};
module.exports = init;

app.js

//
//  Requires
//
var _ = require('underscore')._;
var fs = require('fs');
var io = require('socket.io');
var logger = require('./mod/log.js');
//
//  Configuration
//
var options = {
    port: 6789,
    modules: [],
    servers: []
};
// Reads config.txt and insert values into "var options"
if(fs) {
    var config = fs.readFileSync("data/config.txt").toString().replace("rn", "n").split("n");
    var line, t, val;
    for(i in config) {
        if(config[i].indexOf("=") === -1)
            continue;
        line = config[i].split("=");
        t = Object.prototype.toString.call(options[line[0]]);
        t = t.slice(t.indexOf(" ")+1, t.length-1).toLowerCase();
        switch(t) {
            case 'number':
                val = parseInt(line[1]);
            break;
            case 'array':
                val = line[1].replace(", ", ",").split(",");
            break;
            default:
                val = line[1];
            break;
        }
        options[line[0]] = val;
    }
    logger.info("Configuration loaded");
    logger.info(options);
    io = io.listen(options.port);
}
// Starts all servers specified into config.txt
for(var i in options.servers) {
    logger.info("Starting server: "+options.servers[i]);
    var sv = require('./srv/'+ options.servers[i] + '.js');
    logger.info('./srv/'+ options.servers[i] + '.js');
    sv.init(io); //< HERE THROWS THE ERROR (*)
    logger.info("Ready");
}

(*)错误是下一个:

2013-06-24T04:16:47.513Z-错误:uncaughtException:对象函数(io){返回('/ticket').on("连接",函数(套接字){

            socket.on('message', function () {
            });
            socket.on('disconnect', function () {
            });
    }); }  has no method 'init' date=Mon Jun 24 2013 01:16:47 GMT-0300 (Hora estándar de Argentina), pid=3316, uid=null, gid=null,

cwd=C:\Users\LUCIANO\Svn\Dropbox\Propios\WebGamePlatform\trunk\Development\NodeJSServer,execPath=C:\ProgramFiles(x8 6)\nodejs\node.exe,版本=v0.10.8,argv=[节点,C: \Users\LUCIANO\Svn\Dropbox\Propios\WebGamePlatform\trunk\Development\NodeJSServer\app.js],rss=19689472,heap总计=10243584,heapUsed=5332216,loadavg=[0,0],正常运行时间=14388.1320351,跟踪=[列=5,文件=C:\Users\LUCIANO\Svn\Dropbox\Propios\WebGamePlatform\trunk\Develoment\NodeJSServer\app.js,函数=,行=60,方法=null,native=false,colu-mn=26,file=module.js,function=module_编写行=456,方法=compile,nati ve=false,列=10,文件=module.js,function=Object.Module_extensions..js,line=474,method=模块_扩展。。js,native=false,column=32,file=module.js,f函数=module.load,行=356,方法=load,native=false,column=12,file=module.js,function=function.Module_load,行=312,方法=Module_负载native=false,column=10,file=module.js,function=function.Module.runMain,行=497,方法=Module.runMain,native=false,column=16,file=node.js,function=startup,line=119,method=null,native=false,column=3,file=node.js,function=null,line=901,method=null,native=false],stack=[TypeError:Object函数(io){,返回('/ticket')的io,
.on("连接",函数(套接字){,
socket.on('message',函数(){,})
socket.on('disconnect',函数(){,})
});

我该怎么解决这个问题?

您导出的是函数,而不是对象。这意味着正确的调用应该是sv(io)而不是sv.init(io)
如果要公开init函数,则必须使用module.exports.init = init

相关内容

  • 没有找到相关文章

最新更新