nginx, последовательное выполнение запросов от одного клиента

12
dkameleon
На сайте с 09.12.2005
Offline
386
#11
inse3t:
rtyug, требуемое освещено в полной мере, в чем вопрос?

на уровне фаервола в очередь выстраивать не вариант?

Дизайн интерьера (http://balabukha.com/)
inse3t
На сайте с 08.05.2006
Offline
84
#12

rtyug, впринципе подумаю, как вариант... может чтонить надумаю.

dkameleon, хм... Честно говоря слабо представляю как это, фаервол ipfw. :)

N
На сайте с 06.05.2007
Offline
419
#13

rtyug, и как ты собираешься в перле паузу делать? это не заблокирует весь nginx ?

хендлер то я вижу, а пауза в этом скрипте где?

Вообще, ведь интересная идея - равноценная нагрузка. Давно задумывался об этом. кто-то даже спрашивал Сысоева в рассылке, но ничего не получилось.

Понятно, что хороший портал обычно обеспечивает каждому максимально быстрое открытие, но в условиях дефицита ресурсов можно выдержать больше посетителей, если слишком активных ставить на ожидание. И они таки потерпят. В отличие от остальных.

Кнопка вызова админа ()
rtyug
На сайте с 13.05.2009
Offline
263
#14

netwind, точно не могу сказать, можно попробовать sleep (или как-то еще) и использовать бд, записывать туда кто начинает скачать и кто скачал...

nginx работает как демон, имеет встреонный perl и загружет динамически код, заблокировать не должен, начинает отдать файл после выполнения handler, хотя точно не знаю как будет...

в любом случае можно поставить максимально количество скачиваний в очереде, очередь в миллион скачиваний же не будет?

думаю, что можно на ipfw сделать...

/* 

* Copyright (C) Igor Sysoev
*/


#ifndef _NGX_HTTP_PERL_MODULE_H_INCLUDED_
#define _NGX_HTTP_PERL_MODULE_H_INCLUDED_


#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
#include <nginx.h>

#include <EXTERN.h>
#include <perl.h>


typedef ngx_http_request_t *nginx;

typedef struct {
ngx_str_t filename;
ngx_str_t redirect_uri;
ngx_str_t redirect_args;

SV *next;

ngx_uint_t done; /* unsigned done:1; */

ngx_array_t *variables; /* array of ngx_http_perl_var_t */

#if (NGX_HTTP_SSI)
ngx_http_ssi_ctx_t *ssi;
#endif
} ngx_http_perl_ctx_t;


typedef struct {
ngx_uint_t hash;
ngx_str_t name;
ngx_str_t value;
} ngx_http_perl_var_t;


extern ngx_module_t ngx_http_perl_module;

/*
* workaround for "unused variable `Perl___notused'" warning
* when building with perl 5.6.1
*/
#ifndef PERL_IMPLICIT_CONTEXT
#undef dTHXa
#define dTHXa(a)
#endif


extern void boot_DynaLoader(pTHX_ CV* cv);


void ngx_http_perl_handle_request(ngx_http_request_t *r);
void ngx_http_perl_sleep_handler(ngx_http_request_t *r);


#endif /* _NGX_HTTP_PERL_MODULE_H_INCLUDED_ */


тут вот еще какой-то timedout, ну попробовать можно... :)

void

ngx_http_perl_sleep_handler(ngx_http_request_t *r)
{
ngx_event_t *wev;

ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"perl sleep handler");

wev = r->connection->write;

if (wev->timedout) {
wev->timedout = 0;
ngx_http_perl_handle_request(r);
return;
}

if (ngx_handle_write_event(wev, 0) != NGX_OK) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
}
}

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий