Hello!
On Mon, Apr 20, 2015 at 11:41 AM, 瞿秋丰 wrote:
> local red = redis:new()
> red:set_timeout(1000)
> red:connect(host,port)
> red:subscribe(chan)
>
> local red2 = redis:new()
> red2:set_timeout(1000)
> red2:connect(host,port)
>
我不明白你为什么要创建两个 redis 实例。cosocket 早已经支持全双工了。
另外,你没有对所有可能失败的操作进行错误处理。比如上面的 connect() 和 subscribe() 方法都可能失败。
> while true do
> ngx.thread.spawn(sub)
>
在每次循环时都创建一个轻线程看起来非常奇怪,而且代价高昂。
其实你这里只需要两个轻线程(含主线程本身)在请求处理程序里常驻,一个从 redis 连接读再往下游写,另一个从下游读,再往同一个
redis 连接上写。不应不停地创建新的轻线程。
> 延迟有点大 怎么去改进?
请先修正上面提到的那些问题。
调试大延时,可以在关键代码路径上打印带时间戳的日志消息,然后分享日志消息就可以了。同时警惕 nginx worker 进程的 CPU 使用率。
另外,注意浏览器一般会有很严格的连接数的保护限制,在测试的时候须注意。
Regards,
-agentzh