Re: оптимизация модуля: переполнения и блокировки

minya nginx-forum на nginx.us
Вт Ноя 15 13:20:59 UTC 2011


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

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