Hello! On Sun, Jul 14, 2013 at 8:43 PM, Julien Zefi wrote: > > Sorry by bother you again but i still cannot figure out how some internals > are not working as i expect. I have take in count your suggestions and wrote > a new test case (file attached). >
1. You should simply call ngx_http_output_filter(r, NULL); in your r->write_event_handler, but you set r->write_event_handler to ngx_http_test_stream_handler which always emits brand new data. I'm guessing you don't really understand how the ngx_http_writer and ngx_http_set_write_handler functions are implemented in the Nginx core. Look harder. 2. You should not set r->header_only = 1 in your case because you're actually sending out the response body. Ensure that you know how a flag works before you start using it. 3. Another obvious mistake is that you incorrectly perform r->main->count++; without decrementing it by calling ngx_http_finalize_request, which will certainly lead to request hang. Ensure that you understand this flag before using it. > The test case writes 12.3KB of data every 1ms, at some point it will raise > NGX_AGAIN but from there is not recovering, it keeps in the same state > forever, do you see any specific problem when handling the exception ? > This is trivial to implement by writing some Lua code using ngx_lua module: location /t { content_by_lua ' local message = "..." for i = 1, 100 do ngx.print(message) ngx.flush(true) ngx.sleep(0.001) end '; } Maybe you can just use ngx_lua for your purposes without all the pain of understanding the nginx internals (you seem to lack a lot of knowledge here). If you insist in writing your own nginx C module, then just check out how ngx_lua implements all the APIs demonstrated in the example above. You can also check out the official documentation of ngx_lua: http://wiki.nginx.org/HttpLuaModule Best regards, -agentzh _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel