О назначении модуля можно догодаться из названия. О HandlerSocket говорят много и на разных языках (в основном на японском, английском и последнее время немного на русском).
Модуль NGX_HTTP_HANDLERSOCKET_JSON_MODULE обращается к данным MySQL через протокол HandlerSocket и отдает данные в формате JSON. Область применения AJAX.
Исходники
О конфигурации, особенностях и ограничениях можно почиать ниже.
Инсталляция стандартная, конфигурирование с опцией --add-module:
далее
Конфигурация определена в контексте локейшена. Пример ниже:
Более подробно:
hs_json; — активирует модуль
Параметры соединения (хост и порт по умолчанию localhost:9998, так что можно не указывать, а вот имя базы данных указать прийдется обязательно):
hs_json_host 127.0.0.1;
hs_json_port 9998;
hs_json_db test;
Таблица данных и список выбранных полей (все параметры обязательные):
hs_json_table hs_test;
hs_json_fields keyid,value,code;
Индекс, по которому должна осуществляться выборка:
hs_json_index code;
При отсутствии данной опции используется PRIMARY индекс.
Операция, это условие по выборке данных.
hs_json_op "="; # = default
Возможны следующие операции: =, <, <=, >, >=
По умолчанию, при отсутствие директивы применяется операция «равно»
Ограничение на вывод данных:
hs_json_limit 10;
При отсутствии директивы 10.
Условие на выбор данных, осуществляется через переменную $hs_request. Данные можно назначить как часть урла:
location ~ /json/(.+)/$ {
set $hs_request $1;
}
Как переменную GET или COOKIES:
ПРИМЕР:
Пусть необходимо выбрать города по нескольким первым буквам. Список ограничен 10 позициями. Города выбираются из таблицы:
CREATE TABLE city {
name VARCHAR(45),
id INT,
PRIMARY (id),
KEY `name` (`name`),
}
Если использовать следующую часть конфига:
то это будет аналог запроса: SELECT * FROM cities WHERE city_name >= '$hs_request' LIMIT 10
Запрос будет браться из последней части урл, Наприме для запроса: http: // myserver.com/city/san/ будет сформирован набор даных:
О всех багах в багрепорте, о фичах и пожеланиях в личку или комменты
Модуль NGX_HTTP_HANDLERSOCKET_JSON_MODULE обращается к данным MySQL через протокол HandlerSocket и отдает данные в формате JSON. Область применения AJAX.
Исходники
О конфигурации, особенностях и ограничениях можно почиать ниже.
Инсталляция
Инсталляция стандартная, конфигурирование с опцией --add-module:
./configure --add-module=/full/path/to/dir/nginx_http_handlersocket_json_module
далее
make & sudo make install;
Конфигурация
Конфигурация определена в контексте локейшена. Пример ниже:
location ~ /json/(.+)/$ {
hs_json;
hs_json_host 127.0.0.1;
hs_json_port 9998;
hs_json_db test;
hs_json_table hs_test;
hs_json_index code; # PRIMARY default
hs_json_fields keyid,value,code;
hs_json_op "="; # = default
hs_json_limit 10; # default 10
set $hs_request $1;
}
Более подробно:
hs_json; — активирует модуль
Параметры соединения (хост и порт по умолчанию localhost:9998, так что можно не указывать, а вот имя базы данных указать прийдется обязательно):
hs_json_host 127.0.0.1;
hs_json_port 9998;
hs_json_db test;
Таблица данных и список выбранных полей (все параметры обязательные):
hs_json_table hs_test;
hs_json_fields keyid,value,code;
Индекс, по которому должна осуществляться выборка:
hs_json_index code;
При отсутствии данной опции используется PRIMARY индекс.
Операция, это условие по выборке данных.
hs_json_op "="; # = default
Возможны следующие операции: =, <, <=, >, >=
По умолчанию, при отсутствие директивы применяется операция «равно»
Ограничение на вывод данных:
hs_json_limit 10;
При отсутствии директивы 10.
Условие на выбор данных, осуществляется через переменную $hs_request. Данные можно назначить как часть урла:
location ~ /json/(.+)/$ {
set $hs_request $1;
}
Как переменную GET или COOKIES:
location ~ /json {
set $hs_request $get_id;
}
ПРИМЕР:
Пусть необходимо выбрать города по нескольким первым буквам. Список ограничен 10 позициями. Города выбираются из таблицы:
CREATE TABLE city {
name VARCHAR(45),
id INT,
PRIMARY (id),
KEY `name` (`name`),
}
Если использовать следующую часть конфига:
location ~ /city/(.+)/${
..... // параметры соединения
hs_json_index name,
hs_json_fields name;
hs_json_op ">=";
set $hs_request $1;
}
то это будет аналог запроса: SELECT * FROM cities WHERE city_name >= '$hs_request' LIMIT 10
Запрос будет браться из последней части урл, Наприме для запроса: http: // myserver.com/city/san/ будет сформирован набор даных:
[{"name":"San Amaro"},{"name":"San Andreas"},{"name":"San Andrs"} ... ]
Ошибки
- 500 — неправильная конфигурация, ошибка реализации протокола или ошибка ответа HS
- 503 — нет соединения с HS или ошибки ввода/вывода
Ограничения
- Величина выходного буфера должна быть не более 1К (1024), регулируется #define BUFF_SIZE. Для моих задач больше не нужно.
- Можно использовать только простой индекс (выборка данных только по одному критерию)
- пока русские буквы не реализованы (UTF-8), устранится в ближайшее время
О всех багах в багрепорте, о фичах и пожеланиях в личку или комменты