节点J和并发。它比Tomcat快吗?

时间:2015-07-19 23:11:00

标签: javascript java node.js rest express

我试图理解“在节点js中,除了代码之外,所有内容都是并行运行”语句。所以我决定尝试一下。我有一个宁静的服务,我在我的tomcat本地服务器上运行。

@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";
    }

同样地,我还在我的本地运行NodeJs restful api。

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并发性,我在两秒延迟后在两个选项卡中点击http://localhost:3000/nodeTest。 我在10.03秒之后得到的第一个呼叫响应,而第二个响应用了18.01秒。

这个结果我没想到节点会分配一个回调函数,每当请求完成时它就会执行回调函数(同时它可以处理其他请求。)所以当第一个请求在将回调分配给该请求之后出现时,它应该采取第二个请求,而不是等待第一个请求完成。 因此,理想情况下,第二次通话应该花费近10秒才能完成。

这就提出了一个问题,即节点js如何比每个线程模型的传统请求更快

编辑: -

我正在使用node eclipse插件运行nodeJS和简单的SpringMVC rest服务来运行Tomcat上的rest服务。

确定了Chrome问题的根本原因,chrome阻止了请求,因此第二次呼叫被延迟。

请求时间Time Taken enter image description here

但是当我尝试来自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会停止呼叫。

0 个答案:

没有答案