多谢春哥~ 期待ing~
在 27 Oct, 2012,13:51,agentzh <age...@gmail.com> 写道:
> Hello!
>
> 2012/10/26 朱德江:
>> 春哥你好,
>> 前段时间基于openresty做了一个在线聊天系统,后端用的redis的blpop
>> 现在想基于这个系统记录一些用户的操作行为,目前已经能统计用户什么时候打开什么页面
>>
>> 还有一个主要问题就是不能精确统计某个页面的关闭时间
>> 目前想到的是能统计粗略的关闭时间,就是某页面最后一次向聊天server发请求的时间,这个时间存在40秒的误差(blpop是40s超时)
>>
>> 所以特意来问问lua_ignore_client_abort off 配置指令在你 to do list 里的什么位置
>>
>
> 这个特性位于我的 TODO list 靠近顶部的位置。事实上,我正在我的本地代码分支中实现这个配置指令,或许未来几天之内可以成形。
>
>> 还有,之前在微博上问过您,在配置了lua_ignore_client_abort off 后,是否可以绑定一个函数去记录下线时间
>> 您当时的回复是:可以在 log_by_lua 里面记录到内享内存字典中,然后再从外部 daemon 定时从 nginx 拉这样的数据
>> 我的问题是:这个时候log_by_lua是否可以区分这个请求是客户端主动断开的还是server正常返回的呢?
>>
>
> 你可以在 content_by_lua 里向客户端正常写回响应之后在 ngx.ctx 表中设置一个标志位,例如
>
> ngx.ctx.done = 1
>
> 然后再在 log_by_lua 中检查 ngx.ctx 中的这个标志位。
>
> if ngx.ctx.done then
> -- already returned the response to the client
>
> else
> -- client aborted prematurely
> end
>
> 如果客户端提前关闭连接,则你在 content_by_lua 中的 Lua 代码就不会置 ngx.ctx 中的那个标志位,于是
> log_by_lua 中就得到空标志。
>
> ngx.ctx 表是每请求的生命期,细节见文档:
>
> http://wiki.nginx.org/HttpLuaModule#ngx.ctx
>
> 另外,建议将这样的问题直接发送到 openresty
> 中文邮件列表:https://groups.google.com/group/openresty 现抄送给列表。
>
> Best regards,
> -agentzh