Hello!
2014-11-27 2:56 GMT-08:00 peeonsky:
> 1)使用NULL作为chain的参数调用ngx_http_output_filter ()来刷数据,有时候会导致
> ngx_http_write_filter 模块抛出"the http output chain is empty"错误,
> 从而终止了请求。
根据 nginx 内部实现的约定,只有当你自己的模块还有 busy bufs 时,才能使用 NULL 来调用
ngx_http_output_filter(). 否则的话,你需要使用 ->flush 置为 1 的“special
buf”来作为参数。可以参考 ngx_lua 模块的源码实现。
> 这一块查阅ngx_http_write_filter的模块后,我使用了一个只用来flush的特殊chain来刷数据检查了,
当你自己模块仍有 busy bufs 时(即你的 ctx->busy 不为 NULL)时,应该使用更兼价的 NULL 参数方式。
>
> 2)刚开始我挂了自己的write_event_handler,但nginx不会调用我的write_event_handler,后来查阅相关代码,加上了r->count++;
> ,我的write_event_handler才会被触发调用到。
> 但我不知道r->count 这个标识是做什么用的。
应当总是使用主请求的 count,即 r->main->count,因为当 r 是子请求时,r->count 是被忽略掉的。
这个计数器是主请求的引用计数。当引用计数为 0 时,该主请求就被终止和回收清理了。
>
> 3)是否有nginx代码风格的cindent配置?有的话能否共享下。
>
我没有。
Regards,
-agentzh