ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re[6]: Посоветуйте оптимальные настройки



On Thu, 13 Apr 2006, ForJest wrote:

Ага, спасибо. Т.е. подсчёт для средней скорости, как я указал выше
будет работать корректно при Keep-Alive, получается? Или нужно ещё
скорректировать r->start_time?

Нет, не нужно.

Что касается патча, то, на первый взгляд, должно работать, хотя я ещё
эксперементально не проверял. Прилагаемый патч - модифицированный
вариант предложеннго: вызывать ngx_add_timer(0) не нужно.


Игорь Сысоев
http://sysoev.ru
--- src/http/ngx_http_write_filter_module.c     Wed Jan 11 15:37:47 2006
+++ src/http/ngx_http_write_filter_module.c     Thu Apr 13 10:38:16 2006
@@ -47,7 +47,7 @@
 ngx_int_t
 ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
 {
-    off_t                      size, sent;
+    off_t                      size, to_send;
     ngx_uint_t                 last, flush;
     ngx_chain_t               *cl, *ln, **ll, *chain;
     ngx_connection_t          *c;
@@ -209,18 +209,19 @@
         return NGX_ERROR;
     }
 
-    sent = c->sent;
-
     chain = c->send_chain(c, r->out, r->limit_rate);
 
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
                    "http write filter %p", chain);
 
     if (r->limit_rate) {
-        sent = c->sent - sent;
-        c->write->delayed = 1;
-        ngx_add_timer(r->connection->write,
-                      (ngx_msec_t) (sent * 1000 / r->limit_rate));
+        to_send = r->limit_rate * (ngx_time() - r->start_time);
+
+        if (c->sent > to_send) {
+            c->write->delayed = 1;
+            ngx_add_timer(r->connection->write,
+                    (ngx_msec_t) ((c->sent - to_send) * 1000 / r->limit_rate));
+        }
     }
 
     if (chain == NGX_CHAIN_ERROR) {


 




Copyright © Lexa Software, 1996-2009.