伪代码
app.use("/api",(req,res)=>{
let options={
host: "127.0.0.1",
path: "/xxxx",
port: 666,
method: req.method,
headers: req.headers,
timeout: 15000
}
let req_server = http.request(options,function (res_server) {
res_server.pipe(res)
}
})
req.pipe(req_server)
其中有两处用到了pipe,现在遇到的问题是在高并发的情况下,偶尔会报这个错误 connect EADDRINUSE(给定 addr 的 socket 地址已经在使用。) 127.0.0.1:6666/xxxx
服务器一台,环境 windows 2012,tcp连接数维持在1000-1500
我猜测问题可能出在 pipe 或 连接数有限制(对于127.0.0.1:666来说,所有请求的客户端均来自本机127.0.0.1:随机端口)
理论上单台服务器的tcp连接数为2的48次方,but 这是在客户端ip不同的情况下,由于我这是同一台机器上的服务A 访问 服务B,对服务B来说 只有一个客户,且IP是固定的127.0.0.1, 所以windows 对单个客户有没有连接数方面的限制?
虽然不知道具体问题出在哪里,但如果确定只在高并发情况下报错,建议引入消息队列来限制并发连接数量,应该能解决问题。