Hello!
2013/7/24 xunen:
>
> 我的项目需求是这样的,每个请求结束后(log 阶段) 需要与 一台中心服务器 TCP 通信,发一条消息,断开即可。
>
> 我在 http://wiki.nginx.org/HttpLuaModule 上看到,
>
> ngx.socket.tcp 接口不能用在 log_by_lua 指令所指的 lua 代码中,
> 经过测试确实报这样的错误:API disabled in the context of log_by_lua*
>
> 但可以用在 ngx.timer.at 中,我测试的思路是这样的,在 log.lua 中调用 ngx.timer.at,然后在 ngx.timer.at
> 中调用 ngx.socket.tcp:
>
[...]
>
> 经过测试发现,还真的可以,我想问下我的这种思路是否正确,会不会造成影响呢?
>
可以这么搞。不过关于性能方面我有如下建议:
1. 尽量使用长连接和后端通信,以免大访问量下大量短连接造成过多的 TIME_WAIT 状态的连接而耗尽系统的临时端口。即使用
sock:setkeepalive() 而不是 sock:close().
2. 如果访问量很大的话,建议自己对后端请求按批进行合并,以降低请求后端的频率。
Regards,
-agentzh