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