Вопросы по разработке модуля
xlt
nginx-forum на nginx.us
Пн Янв 23 12:39:04 UTC 2012
Как правильно выделить память из пула
для переменной? В первом варианте, не
выделяется дополнительно память для
ngx_html_code, а во втором вариант для ngx_html_code
выделяется всего 8 byte. С с знаком не
очень хорошо, прошу сильно не пинать.
И второй вопрос, как открыть правильно
не блокируемое соединение с другим http
сервером, чтобы получить от него данные
к примеру в xml формате, и потом
распарсерить и на основе этих данных в
браузер уже пользователю выбросить
результат.
Вариант 1:
static ngx_int_t ngx_http_gogogo_handler(ngx_http_request_t *r){
// то что выдаем в браузер
u_char ngx_html_code[] = "Hello, world!";
//
ngx_int_t rc;
ngx_buf_t *buf;
ngx_chain_t out;
rc = ngx_http_discard_request_body(r);
if (rc != NGX_OK && rc != NGX_AGAIN){
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Failed
ngx_http_discard_request_body()");
return rc;
}
// Если размер параметров больше 0
то, выдаем их в браузер
if(r->args.len > 0){
* ngx_html_code = (u_char *) ngx_pcalloc(r->pool, r->args.len +
1);
ngx_cpymem(ngx_html_code, r->args.data, r->args.len);
}
}
Вариант 2:
static ngx_int_t ngx_http_gogogo_handler(ngx_http_request_t *r){
u_char ngx_hello[] = "Hello, world!";
//
ngx_int_t rc;
ngx_buf_t *ngx_html_code;
// очищаем body-раздел
rc = ngx_http_discard_request_body(r);
if (rc != NGX_OK && rc != NGX_AGAIN){
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Failed
ngx_http_discard_request_body()");
return rc;
}
if(r->args.len > 0){
ngx_html_code = ngx_pcalloc(r->pool, r->args.len + 1);
if (ngx_html_code == NULL){
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
ngx_cpymem(ngx_html_code, r->args.data, r->args.len);
}else{
ngx_html_code = ngx_pcalloc(r->pool, sizeof(ngx_hello));
if (ngx_html_code == NULL){
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
ngx_cpymem(ngx_html_code, ngx_hello, sizeof(ngx_hello));
}
}
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,221537,221537#msg-221537
Подробная информация о списке рассылки nginx-ru