我一直都是一个Perl / PHP排序的人,但我喜欢改变,而Node JS似乎是我接下来的合适位置。
我在YouTube上观看了几个小时的教程,并在这里阅读了一些帖子 - 但我有点卡住了。
我想在我的快速生成的应用程序中包含socket.io(v4.10.6)。 但与此同时,我并不想将 socket.on(...)语句包含在一个文件中 - 我更倾向于将其拆分出来,就像使用路径一样。
鉴于明确生成的应用程序是在 bin / www 中启动的,我很困惑我需要在哪里('socket.io')并指出所有'on'事件到。
This post on stackoverflow,我认为可能会回答我的问题 - 但它表明所有套接字处理程序都在 ./ sockets / base.js 文件中 - 我对Gofilord的回复感到困惑回答。
请原谅我的无知 - 此刻此刻对我来说有点陌生,并且感谢你,一如既往地花时间阅读这篇文章和你的帮助。
/ bin中/万维网
#!/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);
});
答案 0 :(得分:2)
它通常需要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 docs能够很好地解释这一点。这是他们主页上的一个例子:
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
中创建名为io.js的lib来模块化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服务器被返回。