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服务器返回。