我最近一直致力于一个项目,在这个项目中,用户会发帖子找人玩视频游戏。到目前为止,我一直很懒,只是设置post feed在setTimeout上每两秒刷新一次,但是一段时间后它会减慢与服务器的交互,所以我决定学习Socket.io来解决这个问题。
我不知道如何将Socket.io实现到我的项目中。我已经尝试了here找到的官方设置指南以及here找到的非官方指南,但似乎对我都不起作用。
根据官方Socket.io指南,这是我需要实现它才能与我的Express服务器一起使用:
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
io.on('connection', function(){ /* … */ });
server.listen(3000);
这就是我的server.js文件当前的样子,多个斜杠之间的部分是我尝试实现上述代码的地方:
var express = require('express')
, passport = require('passport')
, util = require('util')
, SteamStrategy = require('passport-steam').Strategy
, http = require('http')
, socketio = require('socket.io');
var mongoose = require('mongoose');
var config = require('./config');
mongoose.connect(config.MONGO_URI);
mongoose.connection.on('error', function() {
console.error('MongoDB Connection Error. Please make sure that MongoDB is running.');
});
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new SteamStrategy({
returnURL: 'http://localhost:3000/auth/steam/return',
realm: 'http://localhost:3000',
apiKey: '123123123'
},
function(identifier, profile, done) {
process.nextTick(function () {
profile.identifier = identifier;
return done(null, profile);
});
}
));
///////////////////HERE////////////////////////
var server = require('http').createServer(express);
var io = require('socket.io')(server);
io.on('connection', function(){ /* … */ });
///////////////////HERE////////////////////////
// express config
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.static('app'));
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({ secret: '*****' }));
app.use(passport.initialize());
app.use('/public', express.static(__dirname + '/public'));
app.use(passport.session());
app.use(app.router);
app.set('socketio', io);
app.set('server', server);
});
app.listen(process.env.PORT || 3000, function(){
console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env);
});
require('./routes')(app, passport);
我的问题是,当我尝试启动我的节点服务器时,它告诉我'监听器必须是关于以下行的函数':
var server = require('http').createServer(express);
当我尝试在我的明确要求之后添加括号时:
var express = require('express')()
它告诉我那个对象不是一个函数,即使这是他们在官方例子中的表现。
如何正确地将Socket.io实现到我的项目中?感谢您的帮助。
答案 0 :(得分:0)
您需要将app
,而不是require('express')
的值传递给createServer()
,而{{1}}只返回创建 Express应用的功能。< / p>