Как nginx_redis2_module обеспечивает неблокирующую работу?

Мне нужен сервер nginx, который получает HTTP-запрос и отправляет ответ из Redis-store, и это должно быть неблокирующим. Погуглив и просмотрев форумы, я наткнулся на модуль nginx_redis2_module. Я пытался просмотреть код, но не смог понять, как он работает. Как они добились неблокирующей работы? Достигли ли они этого, добавив события в цикл событий nginx? Есть ли какой-нибудь документ или пример кода, как это делается?

источник: https://github.com/openresty/redis2-nginx-module


person melwin_jose    schedule 21.05.2015    source источник


Ответы (1)


Суть nginx — неблокирующие модули. Это сложный район. Здесь вы можете найти некоторые отправные точки: как написать модуль Nginx?

К вашему сведению:

Однако при использовании в сочетании с lua-nginx-module рекомендуется использовать библиотеку lua-resty-redis вместо этого модуля, поскольку первый гораздо более гибкий и эффективный с точки зрения памяти.

person Alexander Altshuler    schedule 22.05.2015
comment
Я знаю, как написать базовый модуль nginx, на самом деле я даже написал модуль Redis, но он не блокирует. Я хочу не блокирующий. Я также видел «lua_nginx_module» и «nginx_redis2_module». Хотите знать, как они работают, то есть как они достигают неблокирующих операций. - person melwin_jose; 22.05.2015
comment
Общая картина — вы отправляете подзапрос, а nginx возвращает управление вашему модулю и запрашивает контекст после ответа, затем вы можете создать ответ на исходный запрос evanmiller.org/nginx-modules-guide-advanced.html#subrequests - person Alexander Altshuler; 22.05.2015
comment
я искал код nginx_redis2_module в github, не смог найти ничего, связанного с подзапросами - person melwin_jose; 23.05.2015
comment
Чтобы быть более точным, nginx_redis2_module является обработчиком вверх по течению evanmiller.org/nginx-modules-guide .html#прокси. Ключевое предложение — «Оно просто устанавливает обратные вызовы, которые будут вызываться, когда вышестоящий сервер будет готов к записи и чтению с» - person Alexander Altshuler; 25.05.2015