node.js http服务器并发问题

克里卡拉

每当我尝试连续发送快速HTTP Post时,服务器有时会崩溃(java.net.ConnectException:连接被拒绝:connect),有时会死机(没有错误,但无法再使用它),并且有时可以工作。

如果我将HTTP Post缓慢发送到服务器,似乎根本没有问题。

我在node.js中有一个用于http服务器的简单代码-我的猜测是,有时NodeJS服务器会接收到一个请求,然后在发送响应之前接收另一个请求,从而引起各种问题。如何使服务器能够一次接受多个请求?

var server = http.createServer(function (req, res) { 

     if (req.method != 'POST') {
          res.end();
     }
     else {
          req.on('data', function(chunk) {
               //Do some stuff here
               file1=JSON.parse(chunk.toString());
               console.log("Hello World") ;
          }

          req.on('end', function() {
               res.writeHead(200, "OK", {'Content-Type': 'text/html'});
               res.end();
          });
     }
} server.listen(9000);

编辑这是发送HTTP POST的Java程序

 public static String httpUrlRequest(String requestURL, String json) {
       URL url;
       String response = "";
       HttpURLConnection connection = null;
       InputStream is = null;
       try {
           url = new URL(requestURL);

           connection = (HttpURLConnection) url.openConnection();
           connection.setDoOutput(true);
           connection.setRequestMethod("POST");
           connection.getOutputStream().write(json.getBytes());
           connection.getOutputStream().flush();
           connection.getOutputStream().close();
           int code = connection.getResponseCode();
           System.out.println("code" + code);

       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           connection.disconnect();
       }
       return response;
    }

    public static void main(String[] args) {
        Date date = new Date();
       Gson gson = new Gson();
       Map<String, Object> tempMap = gson.fromJson(json, new TypeToken<Map<String, Object>>(){}.getType());

       for(int i = 0; i < 10; i++){
           date = new Date();
           tempMap.put("GetOn", getDateString(date));
           httpUrlRequest("http://111.111.11.111:9000" ,gson.toJson(tempMap));
       }

    }

更新:如果我在nodejs服务器中解析JSON,则有时会收到拒绝连接的错误。

因此,由于某种原因,当我解析请求数据时,nodejs无法接收已发送的整个json文件(5KB)。相反,它只接收一半,而我的Java控制台显示连接错误。并且,在nodejs正确解析大约3到5个请求之后,就会发生此问题。然后,在下一个请求时,一切都会出错。如何判断Java是否断开连接导致仅发送一半的JSON,或者是否仅发送一半的JSON导致nodejs崩溃,最终导致连接错误。

如果我注释掉所有解析,那么我再也不会收到错误了。我什至不明白为什么nodejs中的JSON.Parse会引发Java连接错误....

洛朗·佩林(Laurent Perrin)

您的问题出在这里:

 req.on('data', function(chunk) {
   //Do some stuff here
   file1=JSON.parse(chunk.toString());
   console.log("Hello World") ;
 }

由于可以在多个数据包中发送正文'data',因此您可能会收到多个事件,从而尝试解析不完整的JSON。尝试以下方法:

var chunks = [];

req.on('data', function(chunk) {
  chunks.push(chunk);
}

req.on('end', function () {
  // assemble all chunks
  var body = Buffer.concat(chunks).toString(),
      file1 = JSON.parse(body);

  res.writeHead(200, "OK", {'Content-Type': 'text/html'});
  res.end();
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

node.js http服务器并发问题

来自分类Dev

Node.js HTTP服务器

来自分类Dev

Node.js HTTP服务器

来自分类Dev

连续运行Node JS服务器(http-server)

来自分类Dev

在服务器端Node.JS上倒计时并发送页面响应

来自分类Dev

node.js服务器如何将并发请求排队

来自分类Dev

Node.js状态服务器

来自分类Dev

如何创建Node JS服务器

来自分类Dev

调用node.js服务器

来自分类Dev

崩溃服务器 node.js

来自分类Dev

从 React.js 组件到 Node.js 服务器的 POST 请求问题

来自分类Dev

在Node.js上的相同地址上服务WebSocket和HTTP服务器

来自分类Dev

在Node.js上的相同地址上服务WebSocket和HTTP服务器

来自分类Dev

node.js服务器和带有express.js的HTTP / 2(2.0)

来自分类Dev

Node.js WebSocket服务器,HTTP触发器

来自分类Dev

Node.js WebSocket服务器,HTTP触发器

来自分类Dev

与Apache Web服务器和Node.js REST服务器共享HTTP端口80

来自分类Dev

为什么Node.js简单的HTTP服务器应用程序无法在服务器上运行?

来自分类Dev

在本地网络服务器中运行node.js的问题

来自分类Dev

使用Vega和Node.js的画布出现问题(仅服务器端)

来自分类Dev

Node.js WebSocket服务器缓冲区问题

来自分类Dev

关于无服务器功能的基本 Node.js 问题

来自分类Dev

HAPI JS Node js创建https服务器

来自分类Dev

从Node JS connect.js获取服务器的端口

来自分类Dev

带有较小文件的node.js HTTP服务器中的响应慢得多

来自分类Dev

强制关闭node.js http服务器中的所有连接

来自分类Dev

Cesium映射可以在Apache HTTP服务器而不是node.js环境上运行吗?

来自分类Dev

在node.js上使用http服务器监听多个主机

来自分类Dev

为什么node.js(http服务器)显示有两个请求到来?

Related 相关文章

热门标签

归档