ПРОЕКТЫ 


  АРХИВ 


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: оптимизация модуля: пер еполнения и блокировки



Начиная с того момента, как управление
перешло в мой модуль, мне надо
выполнять цикл вида

while (не отослали все) {
    i = file_from_disk.read(buf, buf_size)     (1)
    write_to_response(buf, i)                      (2)
}

Строка (1) блокирует выполнение потока,
поскольку диск не обязан быть готов к
чтению. Этих чтений много (целый цикл).
Следоваельно, поток заблокируется
надолго. Как реализовать строку (2) (а
следовательно и весь цикл) - я не знаю.
Все примеры по написанию модулей, что я
видел, - тривиальны: выделяется буффер b,
цепочка для вывода out

    b->pos = some_bytes; /* first position in memory of the data */
    b->last = some_bytes + some_bytes_length; /* last position */

    b->last_buf = 1; /* Это ведь просто пример.
Ограничимся тривиальным сценарием */

    out.buf = b;
    out.next = NULL; /* Это ведь просто пример.
Ограничимся тривиальным сценарием */
и все это хозяйство отдается дальше
    return ngx_http_output_filter(r, &out);

Как из этого тривиального примера
получить реальный - непонятно.
Может я туплю - тогда уж сильно не
пинайте :)

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,218226,218382#msg-218382

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.