2016-03-04 3 views
0

Я пытаюсь вокруг с nodejs и Socket.ioNode.js замораживание после нескольких запросов

Но мое приложение отказывается работать после нескольких запросов. Требуется некоторое время, и через некоторое время он снова начнет работать.

Вот код для nodejs-server, где я ожидаю, что проблема возникнет.

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var sqlite3 = require('sqlite3').verbose(); 
var db = new sqlite3.Database('db.sqlite'); 
var http = require('http'); 
var server = http.createServer(app); 
var io = require('socket.io')(server); 
var port = process.env.PORT || 8080; 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

var router = express.Router(); 

router.post('/', function (req, res) { 
    res.sendFile(__dirname + "/app/index.html"); 
}); 
router.get('/sample', function (req, res) { 
    res.sendFile(__dirname + "/app/sample.html"); 
}); 
router.post('/api/error', function (req, res) { 
    var data = req.body; 
    data.date = Date(); 
    io.emit('error', JSON.stringify(data)); 
    res.header("Access-Control-Allow-Origin", "*"); 
}); 

io.on('connection', function(socket){ 
    console.log('a client connected'); 
}); 

app.use('', router); 
app.use(express.static('app')); 
app.use('/static', express.static('node_modules')); 

// START THE SERVER 
server.listen(port); 
console.log('Magic happens on port ' + port); 

Приложение предназначено для мониторинга ошибок в полной веб-таблице.

+1

Любой код, связанные с вашим вопросом должно быть ** в ** Ваш вопрос, не только связаны между собой. Ссылки гниют, делая вопрос и его ответы бесполезными для людей в будущем, и людям не следует следовать какой-то случайной ссылке, чтобы помочь вам. Если вопрос не имеет смысла и на него нельзя ответить без ссылки, это не подходит для этого сайта. Вместо этого поставьте [** минимальный ** полный пример] (/ help/mcve) в вопросе. –

+2

Обработчик для 'POST/api/error' не завершает запрос (отправив ответ). – robertklep

+0

@robertklep ничего себе удивительный. thats ошибка :) вы здорово. – harmoniemand

ответ

3

Обработчик для POST /api/error не отправляет ответ, поэтому клиент будет продолжать ждать. В какой-то момент он может решить не открывать больше соединений с сервером до тех пор, пока не будут получены ответы на предыдущие ответы (или они не были выполнены).

Вы можете просто отправить обратно ответ 200:

router.post('/api/error', function (req, res) { 
    var data = req.body; 
    data.date = Date(); 
    io.emit('error', JSON.stringify(data)); 
    res.header("Access-Control-Allow-Origin", "*").sendStatus(200); 
}); 
Смежные вопросы