Hello!
2014-11-24 19:08 GMT-08:00 <xiati...@gmail.com>:
> 我现在遇到这么一个问题,在nginx里面建立tcp 长连接,并且把这个连接放到连接池里面
> local ok, err = sock:setkeepalive(0,1)
> 使用以上的代码,控制只有一个连接,但是发现每次请求的时候,总是向后端发起tcp连接,不能控制只有一个连接,请问这是什么问题呢
https://github.com/openresty/lua-nginx-module#lua_socket_pool_size
"When the connection pool exceeds the available size limit, the least
recently used (idle) connection already in the pool will be closed to
make room for the current connection."
换言之,超出容量的连接请求不会被排队也不会被拒掉,只是会替换掉池里 least recently used
的空闲连接而已。目前的连接池实现并不会控制到上游的连接数。所以依赖你对下游请求的并发度自己进行控制。
我本地有一个分支实现了基于连接池的上游连接并发度控制,在一定限制之内,新的上游连接请求会在 nginx 内部排队等待而导致 Lua 层面上的
connect() 调用挂起。如果排队的连接请求过多或等待时间过久,connect() 调用会返回错误。我有意在未来几个月内合并此分支。
Regards,
-agentzh