onvno / pokerface

日常技术文章阅读整理
3 stars 0 forks source link

20190811 - Node - ECONNRESET #57

Open onvno opened 5 years ago

onvno commented 5 years ago

项目中查看日志有类似的报错:ECONNRESET, 当时因为是偶发,没有查到问题根源,在看http权威指南时,遇到关于哑代理一说,顺道就从转发这里查阅了一些资料,发现此类问题的原因。

哑代理说明

根据目前情况,使用到的http-better-http-proxy不存在哑代理。 按照权威指南,哑代理是指客户端发来connect:keep-live信息时,代理不知道含义,全部转发到服务层,服务层根据客户端信息打开连接通道,并返回给代理,代理服务原封不动发送给客户。此时客户认为已经建立了所谓长链接了,就继续在当前TCP连接发送请求,但是傻代理不明白,就把当前连接关掉了,没办法正常返回。

卖个关子:connect影响有多大

node http keep-alive demo 这篇文章介绍了connect设置请求结束即关闭的情况下和更改配置后,带来的QPS影响,大约提升一倍 P.S:文中关于http解析慢的问题,估计12.0已经解决了,可惜公司目前的镜像还是 8

可能的解决方案

解决使用 KeepAlive Agent 遇到的 ECONNRESET:这篇文章的症状和实际问题基本上是一致的,问题出在Node8.0默认keepAliveTimeout为5s,但是实际上服务方的时间可能比这个时间短。这样导致客户端链接,中间层认为连接还有效,就直连server端。但是server端连接已过期,所以导致连接错误。文中给到一个例子:agentkeepalive,同时也提到egg已经修复。

onvno commented 5 years ago

其他关于转发keeplive问题,暂时没看: How to keep alive a connection behind proxy in node js