首先,我今天学会了nodejs。
我有一个使用express的nodejs应用程序。我通过apache代理了它。应用程序正常工作(服务器将数据实时传输到浏览器上显示的用户),但由于某种原因,在一段随机的时间后,用户断开连接。我的server.js
看起来像这样
var express = require('express'),
app = express(),
path = require('path'),
http = require('http').Server(app),
io = require('socket.io')(http),
feed = require('./feed');
app.use(express.static(path.join(__dirname, './www')));
io.on('connection', function (socket) {
console.log('User connected. Socket id %s', socket.id);
socket.on('join', function (rooms) {
console.log('Socket %s subscribed to %s', socket.id, rooms);
if (Array.isArray(rooms)) {
rooms.forEach(function(room) {
socket.join(room);
});
} else {
socket.join(rooms);
}
});
io.on('configure', function() {
io.set('close timeout', 60*60*24); // 24h time out
});
socket.on('leave', function (rooms) {
console.log('Socket %s unsubscribed from %s', socket.id, rooms);
if (Array.isArray(rooms)) {
rooms.forEach(function(room) {
socket.leave(room);
});
} else {
socket.leave(rooms);
}
});
socket.on('disconnect', function () {
console.log('User disconnected. %s. Socket id %s', socket.id);
});
socket.on('close', function() {
console.log('Close. Socket id %s', socket.id);
});
socket.on('end', function() {
console.log('end. Socket id %s', socket.id);
});
});
feed.start(function(room, type, message) {
io.to(room).emit(type, message);
});
http.listen(8080, function () {
console.log('listening on: 8080');
});
搜索网页后,我想可能有某种超时/心跳不能正常工作,所以我试过
io.on('configure', function() {
io.set('close timeout', 60*60*24); // 24h time out
});
但它不起作用。我不知道如何调试这些应用程序。有什么我应该尝试的吗?似乎很难相信这是一个浏览器问题,但我不确定。也许还需要在apache代理中配置一些额外的东西。
如果我刷新浏览器,我可以看到用户已连接的服务器打印,并且它开始在浏览器上再次显示数据(虽然有时由于某种原因需要刷新一些),然后随机停止工作之后的时间。