我有一个快速节点应用程序,我试图通过在app.js中没有所有socket.io东西来保持我的代码整洁
我不知道解决这个问题的最好办法。这是我最初的想法,感觉不像最干净的那个
// app.js
var express = require('express')
, app = express()
, server = require('http').createServer(app)
, url = require('url')
, somePage = require('./routes/somePage.js')
, path = require('path');
app.configure(function(){...});
app.get('/', somePage.index);
和路线
// somePage.js
exports.index = function (req, res, server) {
io = require('socket.io').listern(server)
res.render('index',{title: 'Chat Room'})
io.sockets.on('connection', function(socket) {
...code...
}
}
我觉得我很亲密但不完全
答案 0 :(得分:9)
我不知道我是否正确阅读,但看起来你正在为/
的每个请求启动一个套接字服务器,我坦率地说它有点惊讶。
这就是我从app.js中分离出socket.io代码的方法(使用快速3.x,它与2.x略有不同):
// app.js
var express = require('express');
var app = express();
var server_port = config.get('SERVER_PORT');
server = http.createServer(app).listen(server_port, function () {
var addr = server.address();
console.log('Express server listening on http://' + addr.address + ':' + addr.port);
});
var sockets = require('./sockets');
sockets.socketServer(app, server);
// sockets.js
var socketio = require('socket.io');
exports.socketServer = function (app, server) {
var io = socketio.listen(server);
io.sockets.on('connection', function (socket) {
...
});
};
希望有所帮助!
答案 1 :(得分:1)
类似的方法是将app
传递给index.js文件并在那里启动http和socketio服务器。
//app.js
//regular expressjs configuration stuff
require('./routes/index')(app); //all the app.get should go into index.js
由于app
被传递到index.js文件中,我们可以在index.js中执行app.get()
路由,以及连接socketio
//index.js
module.exports = function(app){
var server = require('http').createServer(app)
,io = require('socket.io').listen(server);
app.get('/', function(req, res){
});
server.listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
io.sockets.on('connection', function(socket){
socket.on('my event', function(data){
console.log(data);
});
});
io.set('log level',1);
//io.sockets.emit(...)