node.js 使用req.pipe() 后是否需要手动触发end

伪代码

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 对单个客户有没有连接数方面的限制?

阅读 3.6k
1 个回答

虽然不知道具体问题出在哪里,但如果确定只在高并发情况下报错,建议引入消息队列来限制并发连接数量,应该能解决问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题