用户经常断开连接

时间:2017-02-07 02:08:05

标签: node.js apache express

首先,我今天学会了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代理中配置一些额外的东西。

如果我刷新浏览器,我可以看到用户已连接的服务器打印,并且它开始在浏览器上再次显示数据(虽然有时由于某种原因需要刷新一些),然后随机停止工作之后的时间。

0 个答案:

没有答案