Open onvno opened 5 years ago
项目中查看日志有类似的报错:ECONNRESET, 当时因为是偶发,没有查到问题根源,在看http权威指南时,遇到关于哑代理一说,顺道就从转发这里查阅了一些资料,发现此类问题的原因。
ECONNRESET
哑代理
根据目前情况,使用到的http-better-http-proxy不存在哑代理。 按照权威指南,哑代理是指客户端发来connect:keep-live信息时,代理不知道含义,全部转发到服务层,服务层根据客户端信息打开连接通道,并返回给代理,代理服务原封不动发送给客户。此时客户认为已经建立了所谓长链接了,就继续在当前TCP连接发送请求,但是傻代理不明白,就把当前连接关掉了,没办法正常返回。
http-better-http-proxy
connect:keep-live
长链接
connect
node http keep-alive demo 这篇文章介绍了connect设置请求结束即关闭的情况下和更改配置后,带来的QPS影响,大约提升一倍 P.S:文中关于http解析慢的问题,估计12.0已经解决了,可惜公司目前的镜像还是 8
12.0
8
解决使用 KeepAlive Agent 遇到的 ECONNRESET:这篇文章的症状和实际问题基本上是一致的,问题出在Node8.0默认keepAliveTimeout为5s,但是实际上服务方的时间可能比这个时间短。这样导致客户端链接,中间层认为连接还有效,就直连server端。但是server端连接已过期,所以导致连接错误。文中给到一个例子:agentkeepalive,同时也提到egg已经修复。
keepAliveTimeout
egg
其他关于转发keeplive问题,暂时没看: How to keep alive a connection behind proxy in node js
项目中查看日志有类似的报错:
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
已经修复。