2016-05-03 4 views
0

У меня есть чат в nodejs, Express, socket.io и угловой. Он работает хорошо, но отключается иногда и в случайном порядке. Обычно соединение длится не более 2 минут. Я получаю несколько net :: ERR_CONNECTION_TIMED_OUT на консоли.Socket.io отсоединение

PS: Я использую apache 2.2 на CentOS с сертифицированным ssl. Любые советы?

Мой Заголовок server.js ниже

#!/bin/env node 
 

 
var express = require('express'), 
 
path = require('path'), 
 
app = express(), 
 
logger = require('morgan'), 
 
_m = require("./models/Message"), 
 
Message = _m.m, 
 
NewMessage = _m.n, 
 
Group = _m.g, 
 
Online = _m.o, 
 
DeletedMessage = _m.d, 
 
LastMessage = _m.l, 
 
_mTASK = require("./models/Task"), 
 
_Task = _mTASK.t, 
 
TaskComment = _mTASK.c, 
 
TaskLog = _mTASK.l, 
 
TaskModel = _mTASK.m, 
 
TaskNotification = _mTASK.n, 
 
_d = require("./lib/Connection"); 
 

 
app.use(logger('dev')); 
 
app.set('port', 3000); 
 
app.set('ipaddr', "127.0.0.1"); 
 

 
var server = require('http').createServer(app); 
 

 
// catch 404 and forward to error handler 
 
app.use(function(req, res, next) { 
 
    var err = new Error('Not Found'); 
 
    err.status = 404; 
 
    next(err); 
 
}); 
 

 
if (app.get('env') === 'development') { 
 
    app.use(function(err, req, res, next) { 
 
     res.status(err.status || 500); 
 
     res.render('error', { 
 
      message: err.message, 
 
      error: err 
 
     }); 
 
    }); 
 
} 
 

 
// production error handler 
 
// no stacktraces leaked to user 
 
app.use(function(err, req, res, next) { 
 
    res.status(err.status || 500); 
 
    res.render('error', { 
 
     message: err.message, 
 
     error: {} 
 
    }); 
 
}); 
 

 
server.listen(app.get('port'), app.get('ipaddr'), function() { 
 
    console.log('Express server listening on IP: ' + app.get('ipaddr') + ' and port ' + app.get('port')); 
 
}); 
 

 

 
var io = require("socket.io")(server); 
 

 
io.set("origins", 'https://meusite.me:*'); 
 
io.set('transports', ['polling', 'websocket']);

ответ

0

Немного Socket.io фоне

Сервер отправляет сердцебиение клиенту каждые Х секунд, где Х = = значение heartbeat interval.

Если клиент не отвечает, сокет считает Соединим мертвым

Клиент ждет сердцебиения от сервера каждые N секунд, где N == значение heartbeat timeout конфигурации.

Оба этих значения установлены на сервере с отправкой клиенту heartbeat timeout при открытии отдельного соединения.

Учитывая вышеизложенное файл, вы можете установить heartbeat timeout с чем-то вроде ...

//WARNING io.set() has been depricated 
 

 
var io = require("socket.io")(server); 
 

 
io.set('heartbeat interval', '30000'); 
 
io.set('heartbeat timeout', '45000'); 
 
io.set("origins", 'https://meusite.me:*'); 
 
io.set('transports', ['polling', 'websocket']); 
 

 
//Setting your server configuration is now done via .. 
 

 
var socket = require('socket.io')({ 
 
    // options go here 
 
    'configOption': 'configValue'; 
 
});