Re: Re[6]: Посоветуйте оптимальные настройки
Igor Sysoev
is at rambler-co.ru
Thu Apr 13 15:26:41 MSD 2006
On Thu, 13 Apr 2006, ForJest wrote:
> Ну тут я уже не знаю какой выбрать :-). Со спаньём в 0 секунд вроде
> выглядит неплохо довольно, к тому же отвечает старому поведению по
> ограничению скорости.
> Ведь если там было маленькое значение sent и большое значение
> limit_rate то я так понимаю как раз получался 0 msec для таймера.
Я решил оставить старый алгоритм вычисления таймера, но вычислять
ограничение для отправки с учётом уже отосланного. Патч прилагается.
limit_rate 4K, 32K, 1M, 2M вполне работают.
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
--- 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 15:17:03 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, sent, to_send;
ngx_uint_t last, flush;
ngx_chain_t *cl, *ln, **ll, *chain;
ngx_connection_t *c;
@@ -209,23 +209,27 @@
return NGX_ERROR;
}
+ to_send = r->limit_rate * (ngx_time() - r->start_time + 1) - c->sent;
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 to send %O", to_send);
+
+ chain = c->send_chain(c, r->out, to_send);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http write filter %p", chain);
- if (r->limit_rate) {
+ if (chain == NGX_CHAIN_ERROR) {
+ c->error = 1;
+ return NGX_ERROR;
+ }
+
+ if (to_send) {
sent = c->sent - sent;
c->write->delayed = 1;
ngx_add_timer(r->connection->write,
(ngx_msec_t) (sent * 1000 / r->limit_rate));
- }
-
- if (chain == NGX_CHAIN_ERROR) {
- c->error = 1;
- return NGX_ERROR;
}
for (cl = r->out; cl && cl != chain; /* void */) {
More information about the nginx-ru
mailing list