gpt4 book ai didi

java - node.js http服务器并发问题

转载 作者:搜寻专家 更新时间:2023-11-01 00:45:20 25 4
gpt4 key购买 nike

每当我尝试连续发送快速 HTTP Post 时,服务器有时会崩溃(java.net.ConnectException: Connection refused: 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 POSTS 的 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 连接错误....

最佳答案

你的问题出在这里:

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

由于正文可以在多个数据包中发送,您可能会收到超过 1 个 '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();
});

关于java - node.js http服务器并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20393367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com