在 2016年1月6日星期三 UTC+8下午12:15:37,agentzh写道:
Hello!
2016-01-05 20:12 GMT-08:00 Yichun Zhang (agentzh):
>
> 这里 recv() 返回 0 表示当前连接被对端(上游服务器)以正常方式关闭。
>
如果你启用连接池和上游服务器通信的话,上游服务器可能有类似 nginx 的 keepalive_requests 这样的配置:
http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests
即一个连接能发送的请求数是有限的。或者有类似 keepalive_timeout 这样的时间限制。
这些都是正常现象。
是的,我是使用cosocket直接和上游服务器进行通信;就是说从cosocket连接池中取出的连接可能会被对端提前结束么?
我这里一直出现的现象都是:请求成功转发给上游后,在读响应行的时候出错;如果仅是上游由于某些keepalive机制而关闭连接,有点难以理解;
因为,我是有输出cosocket的重用次数的,这个次数是不定的,有时是0,即是新建的;有时是非0,即是重用的;
当然,无论怎样,c->recv 返回0既然是意味着连接已经被对端正常关闭,那么问题就是出在上游了;
建议在你的 Lua 代码里面对此作错误处理,在发生此类错误时自动进行重试就好了。
这类错误要如何识别?通过返回的error为“closed”可行么?
Thanks.