Express-Generator – 包含socket.io(bin / www)

我一直是一个Perl / PHP sorta人,但我喜欢改变和节点JS似乎是我下一个去的正确的地方。

我已经在YouTube上观看了好几个小时的教程,并在这里阅读了一些post – 但是我已经有点卡住了。

我想在我的express生成的应用程序(v4.10.6)中包含socket.io。 同时,虽然我并不想在一个文件中包含socket.on(…)语句,但是我更愿意将它们像路由一样分开。

鉴于快速生成的应用程序在bin / www中启动,我很困惑,我需要('socket.io'),并指出所有'开'的事件。

这个post在stackoverflow ,我想可能回答我的问题 – 但它build议所有的套接字处理程序在./sockets/base.js文件 – 我对Gofilord对答案的答复感到困惑。

请原谅我的无知 – 这一切对我来说都是陌生的,并感谢你一如既往地花时间阅读本文和你的帮助。

/斌/ WWW

#!/usr/bin/env node var debug = require('debug')('rhubarb'); var app = require('../app'); app.set('port', process.env.PORT || 1127); var server = app.listen(app.get('port'), function() { debug('Express server listening on port ' + server.address().port); }); 

它通常需要app.js中的socket.io,然后告诉你的io服务器听你的应用程序。 使用你发布的例子,看起来像这样:

 var debug = require('debug')('rhubarb'); var app = require('../app'); var server = require('http').Server(app); var io = require('socket.io')(server); app.set('port', process.env.PORT || 1127); var server = server.listen(app.get('port'), function() { debug('Express server listening on port ' + server.address().port); }); 

socketio文件做了很好的解释。 以下是他们主页上的一个例子:

 var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(80); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 

更新:

我通常通过在/lib创build一个名为io.js的库来模块化socketio设置,如下所示:

 module.exports = function(server){ var io = require('socket.io')(server); // catch errors io.on('error', function(err){ throw err; }) // Set Socket.io listeners by creating a socket.io middleware // attachEventlisteners would live in `/controllers` io.use(attachEventlisteners); io.on('connection', function (socket) { // do things }); return io; // so it can be used in app.js ( if need be ) } 

然后在app.js我可以简单地通过server ,当我需要它:

  var io = require('./lib/io')(server); 

你不需要在app.js中进一步做任何事情,因为一切都设置在/lib/io.js ,但如果你想要你可以因为io服务器返回。