Javascript 节点Js和并发性。它比Tomcat快吗?
我试图理解“在NodeJS中,除了代码之外,所有东西都是并行运行的”语句。所以我决定试一试。我在tomcat本地服务器上运行一个restful服务Javascript 节点Js和并发性。它比Tomcat快吗?,javascript,java,node.js,rest,express,Javascript,Java,Node.js,Rest,Express,我试图理解“在NodeJS中,除了代码之外,所有东西都是并行运行的”语句。所以我决定试一试。我在tomcat本地服务器上运行一个restful服务 @RequestMapping(value = "/ping", method = RequestMethod.GET) public String ping() throws InterruptedException { //Simulation for background processing Thre
@RequestMapping(value = "/ping", method = RequestMethod.GET)
public String ping() throws InterruptedException {
//Simulation for background processing
Thread.sleep(10000);
return "Hi I am Tomcat Ping Service";
}
同样,我的本地服务器上也运行着nodejsrestfulapi
app.get('/nodeTest', function(req, res){
var options = {
host: '192.168.1.8',
port : 8080,
path : '/TestNode/rest/ping'
};
http.get(options, function(resp) {
console.log("Got response: " + resp.statusCode);
res.send("Inside Node JS Ping Service.");
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
});
我正在从浏览器调用节点restservice,而浏览器又在tomcat上调用restservice。
为了检查nodejs的并发性,我在两秒钟的延迟后点击了两个选项卡。
我在10.03秒后得到了第一个呼叫响应,而第二个响应耗时18.01秒
当节点分配回调函数时,我没有预料到这个结果,只要请求完成,它就会执行回调函数(同时它可以处理其他请求)。因此,当第一个请求在分配回调给该请求之后出现时,它应该接受第二个请求,而不是等待第一个请求完成。
因此,理想情况下,第二次呼叫应该花费将近10秒的时间来完成
这就提出了一个问题:node js如何比传统的每线程请求模型更快
编辑:-
我正在使用nodeeclipse插件运行nodeJS,使用simplespringmvcrest服务在Tomcat上运行rest服务
确定了chrome问题的根本原因,chrome正在暂停请求,因此第二次呼叫延迟
请求所用时间
但当我尝试一个来自firefox和一个来自chrome的请求时,它成功了
以下是日志:-
节点服务器:-
Request Entry time in Node JS :: Sun Jul 19 2015 21:57:39 GMT-0400 (Eastern Daylight Time)
Request Entry time in Node JS :: Sun Jul 19 2015 21:57:45 GMT-0400 (Eastern Daylight Time)
Got response: 200
Time Taken in seconds :: 10.004
[90mGET /nodeTest [32m200 [90m10004ms - 28b[0m
Got response: 200
Time Taken in seconds :: 10.005
Tomcat服务器:-
Thread Entry time in Tomcat :: http-8080-1 :: Sun Jul 19 21:57:39 EDT 2015
Thread Entry time in Tomcat :: http-8080-2 :: Sun Jul 19 21:57:45 EDT 2015
Time taken by thread :: http-8080-1 :: 10
Time taken by thread :: http-8080-2 :: 10
不知道为什么chrome会推迟通话。这看起来确实很奇怪。你能检查一下两个Tomcat线程是什么时候创建的吗?即同时或串联。可以使用
AtomicInteger
和Thread.setName
。或者只返回ping
中的开始和结束时间字符串。您必须在某个地方有一些同步块或瓶颈。你在给我们看所有的代码吗?这看起来真的很奇怪。你能检查一下两个Tomcat线程是什么时候创建的吗?即同时或串联。可以使用AtomicInteger
和Thread.setName
。或者只返回ping
中的开始和结束时间字符串。您必须在某个地方有一些同步块或瓶颈。你给我们看所有的代码吗?