Привет всем, Я написал nginx модуль, для доступа к базе данных Couchbase[1]. Этот модуль получился немного не обычным:
1) используется библиотека libcouchbase, которая сама рулит установкой обработчиков на события, и выполнением собственно IO из них. Так что пришлось написать плагин[3], который подставляет функции nginx в виде, удобном для libcouchbase. 2) частично потому что IO выполняется внутри libcouchbase, как и маршрутизация запроса в кластер (основанная на хешировании ключа), пришлось отказаться от использования ngx_http_upstream_t (хотя тут я могу ошибаться). Кроме того libcouchbase может асинхронно получить по конфигурационному сокету информацию об изменении топологии кластера, и закрыть часть рабочих сокетов, и подготовить к открытию по требованию новые. В ходе тестирование оказалось, что моя реализация неплохо работает как с под-запросами из других модулей, так и обычными прямыми запросами. Но всё же нашёлся случай, когда модуль (к его исходникам у меня нет доступа) делает позапрос в мой, и рассчитывает, что в можно будет получить содержимое результата через r->upstream->buffer или статус через r->upstream->state->status. Собственно вопрос, может ли существовать модуль в экосистеме nginx, который не заполняет r->upstream в обработчике? [1]: https://github.com/couchbaselabs/couchbase-nginx-module [2]: https://github.com/couchbaselabs/couchbase-nginx-module/blob/master/src/ngx_lcb_plugin.c -- Sergey Avseyev _______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
