Http Request不能立即在Nodejs服务器中发送响应

我将JSON请求逐个发送到nodejs服务器。 第六次请求后,服务器无法立即回复客户端,然后花费一点时间(15秒或更多一点,并发回给我答案200确定)它发生一个写入MongoDB的json值和时间是重要的选项我与REST通话。 在这种情况下如何find错误? (哪些工具或脚本代码可以帮助我?)我的服务器端代码是这样的

var controlPathDatabaseSave = "/save"; app.use('/', function(req, res) { console.log("req body app use", req.body); var str= req.path; if(str.localeCompare(controlPathDatabaseSave) == 0) { console.log("controlPathDatabaseSave"); mongoDbHandleSave(req.body); res.setHeader('Content-Type', 'application/json'); res.write('Message taken: \n'); res.write('Everything all right with database saving'); res.send("OK"); console.log("response body", res.body); } 

});

我的客户端代码如下:

 function saveDatabaseData() { console.log("saveDatabaseData"); var oReq = new XMLHttpRequest(); oReq.open("POST", "http://192.168.80.143:2800/save", true); oReq.setRequestHeader("Content-type", "application/json;charset=UTF-8"); oReq.onreadystatechange = function() {//Call a function when the state changes. if(oReq.readyState == 4 && oReq.status == 200) { console.log("http responseText", oReq.responseText); } } oReq.send(JSON.stringify({links: links, nodes: nodes})); } 

– Mongodb保存代码

 function mongoDbHandleSave(reqParam){ //Connect to the db MongoClient.connect(MongoDBURL, function(err, db) { if(!err) { console.log("We are connected in accordance with saving"); } else { return console.dir(err); } /* db.createCollection('user', {strict:true}, function(err, collection) { if(err) return console.dir(err); }); */ var collection = db.collection('user'); //when saving into database only use req.body. Skip JSON.stringify() function var doc = reqParam; collection.update(doc, doc, {upsert:true}); }); 

}

您可以在Google Chrome开发者编辑器中看到我的REST调用。 (前六个电话有200个电话,最后一个电话处于未决状态)

在这里输入图像说明

– 客户输出

在这里输入图像说明

– 服务器输出

在这里输入图像说明

提前致谢,

由于看起来这些是来自浏览器的Ajax请求,因此每个浏览器对同一主机允许的同时连接数量都有限制。 浏览器的设置随着时间的推移而变化,但很可能在4-6的范围内。 所以,如果你试图同时运行6个Ajax调用的主机,那么你可能会遇到这个限制。 浏览器所做的是暂缓发送最新的,直到第一个完成(从而避免一次发送太多)。

这里的总体思路是保护服务器免受单个客户端的殴打,从而允许更公平地在多个客户端之间共享负载。 当然,如果你的服务器没有其他的东西要做,那么它并不需要保护更多的连接,但是这不是一个交互式的系统,它只是硬连接到极限。

如果有任何其他请求正在处理(加载图像或脚本或CSS样式表)到同一个来源,这些也将数到极限。

如果你在Chrome中运行这个程序,并打开debugging器的networking选项卡,你可以确切地看到发送一个请求的时间和接收到响应的时间。 这应该立即显示您以后的请求是否在浏览器或服务器上被阻止。

这里是关于这个主题的文章: 浏览器的同一个域的最大并发连接数 。

此外,请记住,根据您的请求在服务器上执行的操作以及服务器的结构,可能会有最大数量的服务器请求可以一次高效处理。 例如,如果您有一个阻塞的线程服务器,为每个四个CPUconfiguration了一个线程,那么一旦服务器一次有四个请求,它可能必须排队第五个请求,直到第一个请求完成比其他的要迟。