Socket.io不适用于我的节点/快速应用程序

我正在使用openshift与快递,无论什么configuration我改变socket.io它打破了我的申请。 我错过了什么?

我已经注释了使用socket.io的部分和应用程序运行正常。 当我取消注释socket.io时,一切都出错了。 我试图改变代码的位置来接受标准的io.listen(app),但它仍然打破。 我也尝试了很多来自互联网的例子。

这可能吗? //self.io.listen(self.app); 如果不是我应该在我的应用程序的上下文中听到socket.io? 我无法调用io.listen(服务器)..

var express = require('express'); //etc // configuration mongoose.connect(configDB.url); // connect to our database require('./config/passport')(passport); var App = function(){ // Scope var self = this; // Setup self.dbServer = new mongodb.Server(process.env.OPENSHIFT_MONGODB_DB_HOST,parseInt(process.env.O PENSHIFT_MONGODB_DB_PORT)); self.db = new mongodb.Db(process.env.OPENSHIFT_APP_NAME, self.dbServer, {auto_reconnect: true}); self.dbUser = process.env.OPENSHIFT_MONGODB_DB_USERNAME; self.dbPass = process.env.OPENSHIFT_MONGODB_DB_PASSWORD; self.ipaddr = process.env.OPENSHIFT_NODEJS_IP; self.port = parseInt(process.env.OPENSHIFT_NODEJS_PORT) || 8080; if (typeof self.ipaddr === "undefined") { console.warn('No OPENSHIFT_NODEJS_IP environment variable'); }; // Web app urls self.app = express(); //self.io = require('socket.io'); //self.clients = []; /*self.io.sockets.on('connection', function (socket) { self.clients.push(socket); socket.emit('welcome', { message: 'Welcome!' }); // When socket disconnects, remove it from the list: socket.on('disconnect', function() { var index = self.clients.indexOf(socket); if (index != -1) { self.clients.splice(index, 1); } }); });*/ // set up our express application self.app.use(morgan('dev')); // log every request to the console self.app.use(cookieParser()); // read cookies (needed for auth) self.app.use(bodyParser.json()); // get information from html forms self.app.use(bodyParser.urlencoded({ extended: true })); self.app.use(bodyParser()); self.app.use(multer({ dest: process.env.OPENSHIFT_DATA_DIR})); self.app.use(compression()); self.app.use(express.static(__dirname + '/public')); self.app.use("/public2", express.static(process.env.OPENSHIFT_DATA_DIR)); self.app.set('view engine', 'ejs'); // set up ejs for templating self.app.use(function (req, res, next) { res.setHeader('Access-Control-Allow-Origin', req.headers.origin); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); res.setHeader('Access-Control-Allow-Credentials', 'true'); next(); } ); // required for passport self.app.use(session({ secret:'example', maxAge: 6 * 3 * 60 * 1000, store: new MongoStore({ url: process.env.OPENSHIFT_MONGODB_DB_URL, clear_interval: 6 * 3 * 60 * 1000 }) })); self.app.use(passport.initialize()); self.app.use(passport.session()); // persistent login sessions self.app.use(flash()); // use connect-flash for flash messages stored in session require('./app/routes.js')(self.app, passport); // load our routes and pass in our app and fully configured passport self.connectDb = function(callback){ self.db.open(function(err, db){ if(err){ throw err }; self.db.authenticate(self.dbUser, self.dbPass, {authdb: "admin"}, function(err, res){ if(err){ throw err }; callback(); }); }); }; //starting the nodejs server with express self.startServer = function(){ self.app.listen(self.port, self.ipaddr, function(){ console.log('%s: Node server started on %s:%d ...', Date(Date.now()), self.ipaddr, self.port); }); //websockets //self.io.listen(self.app); }; // Destructors self.terminator = function(sig) { if (typeof sig === "string") { console.log('%s: Received %s - terminating Node server ...', Date(Date.now()), sig); process.exit(1); }; console.log('%s: Node server stopped.', Date(Date.now()) ); }; process.on('exit', function() { self.terminator(); }); self.terminatorSetup = function(element, index, array) { process.on(element, function() { self.terminator(element); }); }; ['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT', 'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGPIPE', 'SIGTERM'].forEach(self.terminatorSetup); }; //make a new express app var app = new App(); //call the connectDb function and pass in the start server command app.connectDb(app.startServer); 

谢谢您的意见。 解决方法是创build一个self.servervariables来将express服务器传递到socket.io。 我已经testing了连接,现在工作正常; 与所有其他服务器依赖关系。

  //starting the nodejs server with express self.startServer = function(){ self.server = self.app.listen(self.port, self.ipaddr, function(){ console.log('%s: Node server started on %s:%d ...', Date(Date.now()), self.ipaddr, self.port); }); //websockets self.io = require('socket.io').listen(self.server); };