2016-03-04 51 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); 

该应用程序用于监视完整webstack中的错误。

+1

您问题相关的任何代码必须在**你的问题,而不仅仅是链接**。链接腐烂,使得问题及其答案将来对人们无用,人们不应该遵循一些随机链接来帮助你。如果问题没有意义,没有链接就无法回答,这个网站不适合。相反,在问题中放置[** minimum ** complete example](/ help/mcve)。 –

+2

POST/api/error'的处理程序没有结束请求(通过发送回应)。 – robertklep

+0

@robertklep哇哇。多数民众赞成在错误:)你是伟大的。 – 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); 
});