相信不少使用HTTP RPC作为微服务通信协议的业务会碰到偶发的connection reset错误,由于出现的几率不高,大多数对事务准确性要求不高的业务中忽略它问题也不大,或者在出现的时候做个重试也就解决了,但这个阴魂不散的错误还是让人感到头疼。原因分析究其原因,是因为服务间http调用通常会开启keep-alive以到达复用传输连接的目的,而keep-alive连接的关闭不是那么优雅。 可以用一段简单的Node.js代码来复现。const http = require("http"); const agent = new http.Agent({ keepAlive: true }); // server has a 5 seconds default idle timeout http .createServer((req, res) => { res.write("foo\n"); res.end(); }) .listen(3000); setInterval(() => { // using a keep-alive agent http.get("http:...