<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap:break-word"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Hello!</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">You mustn’t use standard sleep function for it will block Nginx’s events loop, alternatively, you need to put your write event to a timer, set the proper handler when the timer expires.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">BTW, you should always check the return value of ngx_http_send_header and ngx_http_output_filter.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div> <div id="bloop_sign_1499651508677217024" class="bloop_sign"></div> <br><p class="airmail_on">On 10 July 2017 at 01:43:46, Johan Andersson (<a href="mailto:ng23@firemail.cc">ng23@firemail.cc</a>) wrote:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>Hi everyone,
<br>
<br>I have some issues writing my nginx modules.
<br>
<br>I am on Debian Stretch, installed nginx with the default configuration,  
<br>and took the hello_world module. It works without a hitch. Then I  
<br>changed the handler to send three "hello world" responses, and sleep for  
<br>one second between each response.
<br>
<br>However, when I look at the result in my browser, the page loads, pauses  
<br>for three seconds, and then displays all three "hello world" messages at  
<br>once.
<br>
<br>Actually I was flushing each response, so I expected each "hello world"  
<br>message to appear one after the other, with one second pause between  
<br>them.
<br>
<br>Am I doing something wrong? Is this event the correct way to achieve  
<br>this? All functions return NGX_OK. This is my code:
<br>
<br>static ngx_int_t ngx_http_hello_world_handler(ngx_http_request_t *r)
<br>{
<br>     ngx_buf_t *b;
<br>     ngx_chain_t out;
<br>     ngx_int_t result;
<br>
<br>     r->headers_out.content_type.len = sizeof("text/html") - 1;
<br>     r->headers_out.content_type.data = (u_char *) "text/html";
<br>     r->headers_out.status = NGX_HTTP_OK;
<br>     //r->headers_out.content_length_n = sizeof(ngx_hello_world);
<br>     ngx_http_send_header(r);
<br>
<br>     for(int i = 0; i < 3; i++)
<br>     {
<br>         b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
<br>
<br>         out.buf = b;
<br>         out.next = NULL;
<br>
<br>         b->pos = ngx_hello_world;
<br>         b->last = ngx_hello_world + sizeof(ngx_hello_world);
<br>         b->memory = 1;
<br>         b->flush = 1;
<br>         b->last_buf = (i == 2);
<br>
<br>         result = ngx_http_output_filter(r, &out);
<br>         ngx_http_send_special(r, NGX_HTTP_FLUSH);
<br>
<br>         sleep(1);
<br>     }
<br>
<br>     return result;
<br>}
<br>
<br>Cheers
<br>Johann
<br>_______________________________________________
<br>nginx mailing list
<br><a href="mailto:nginx@nginx.org">nginx@nginx.org</a>
<br><a href="http://mailman.nginx.org/mailman/listinfo/nginx">http://mailman.nginx.org/mailman/listinfo/nginx</a>
<br></div></div></span></blockquote></body></html>