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