Welcome! Log In Create A New Profile

Advanced

Re: Re[2]: http_push_module

January 27, 2010 10:22AM
Спасибо, разобрался. Теперь оно работает немного. Проблема в сабреквестах.
Прежде, чем использовать сторонние решения, хотелось бы разобраться в
возможностях самого энджи.

Есть ngx_http_internal_redirect. Она не очень подходит, поскольку идёт
возврат ответа пользователю.
У емиллера нашёл ngx_http_subrequest. Оно тоже, по идее, возвращает
результат пользователю, но один из параметров этой функции - коллбэк. Мне
хотелось бы обрабатывать ответ приложения прямо на сервере, замораживая
отсылку ответа. Думаю, коллбэк поможет это сделать. Но пока не представляю
как. Этого даже Емиллер, по его признанию, не знает. Хотелось бы услышать
мнение знающих или Самого.

Вообще - обработка запроса идёт в один поток. Самый простой вариант, который
я вижу - в форке system("curl ...") - но это вообще хардкор :)

Напомню, что сейчас мой патч для пуш-модуля перехватывает момент подключения
или отключения пользователя и должен отсылать запрос приложению. После того,
как это заработает, буду хранить отдельный список подключённых пользователей
и буду слать запросы приложению из нгинкса только когда это нужно, учитывая
тайм-ауты дисконнекта.

Заранее спасибо.

27 января 2010 г. 14:58 пользователь Maxim Dounin <mdounin@mdounin.ru>написал:

> Hello!
>
> On Wed, Jan 27, 2010 at 01:36:01PM +0300, pyromaniac - wrote:
>
> > В общем, url->data = 0 Из-за этого и падает. Не понятно, почему
> ngx_palloc
> > не срабатывает. Использование r->pool вместо ngx_http_push_pool даёт
> > возможность 1 раз вывести информацию, на второй раз падает с теми же
> > симптомами.
>
> Потому что вы выделяете память под стуктуру ngx_str_t, а не под собственно
> данные. А в структуре ngx_str_t data - это указатель на данные,
> который вы используете неинициализировав.
>
> Вообще говоря - вам повезло что он 0. Мог бы показывать
> куда-нибудь на реальную память процесса, и вы бы её своим кодом
> переписали. Последствия дальше могут быть любые.
>
> Maxim Dounin
>
> > Александре, а где можно почитать про ngx_shmtx_lock? Что это за зверь
> такой?
> > Он лочит тред, насколько я понимаю?
> >
> > 27 января 2010 г. 12:34 пользователь Alexandre Kalendarev
> > <akalend@mail.ru>написал:
> >
> > >
> > > > Господа, тут такая оказия приключилась:
> > > >
> > > > static void ngx_http_push_send_request(ngx_http_request_t *r,
> > > > ngx_http_variable_value_t *url_variable) {
> > > > if (url_variable != NULL && url_variable->not_found != 1 &&
> > > > url_variable->len != 0) {
> > > > ngx_str_t *url;
> > > > ngx_int_t len = url_variable->len;
> > > > if ((url = ngx_palloc(ngx_http_push_pool, sizeof(*url) +
> len)) !=
> > > > NULL) {
> > > > url->len = len;
> > > > ngx_memcpy(url->data, url_variable->data, len);
> > > >
> > > > ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
> "переход
> > > на
> > > > %s", (char *) url->data);
> > > > } else {
> > > > ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "push
> > > module:
> > > > unable to allocate memory for $subscribe_url or $unsubscribe_url
> > > string");
> > > > }
> > > > ngx_pfree(ngx_http_push_pool, url);
> > > > }
> > > > }
> > > >
> > > > Падает это всё дело на ngx_memcpy(url->data, url_variable->data,
> len); с
> > > > worker process exited on signal 11 и я понять не могу, почему. Может,
> > > > кто-нибудь подскажет?
> > >
> > > [quote]
> > > On POSIX-compliant platforms, SIGSEGV is the signal sent to a process
> when
> > > it makes an invalid memory reference, or segmentation fault. The
> symbolic
> > > constant for SIGSEGV is defined in the header file signal.h. Symbolic
> signal
> > > names are used because signal numbers can vary across platforms; in
> practice
> > > it is usually signal #11.[1]
> > > [/quote]
> > >
> > > 1) включаешь опцию --debug
> > > 2) запускаешь в конфигурации
> > > worker_process 1;
> > > master_process off;
> > > daemon_off;
> > > 3) запускаешь dbg nginx
> > > и ловишь segmentation fault далее backtrace определяешь, где валится
> > >
> > > сделай лог: ngx_log_error( NGX_LOG_DEBUG, r->connection->log,
> "url->data
> > > =%d url_variable->data=%d , len\n" ,url->data, url_variable->data,
> len);
> > > должно помочь
> > > если валится на этом логе, значить либо url=NULL либо url_variable =
> NULL,
> > > по этому я делаю так:
> > > if ( url )
> > > ngx_log_error( ... выводим данные)
> > > else
> > > ngx_log_error( ... выводим сообщение url=NULL)
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > _______________________________________________
> > > nginx-ru mailing list
> > > nginx-ru@nginx.org
> > > http://nginx.org/mailman/listinfo/nginx-ru
> > >
>
> > _______________________________________________
> > nginx-ru mailing list
> > nginx-ru@nginx.org
> > http://nginx.org/mailman/listinfo/nginx-ru
>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://nginx.org/mailman/listinfo/nginx-ru
>
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

http_push_module

pyromaniac January 26, 2010 04:17AM

Re: http_push_module

akalend January 26, 2010 07:04AM

Re: http_push_module

Peter Leonov January 26, 2010 07:40AM

Re: http_push_module

pyromaniac January 26, 2010 12:00PM

Re: http_push_module

pyromaniac January 27, 2010 04:04AM

Re[2]: http_push_module

akalend January 27, 2010 04:36AM

Re: Re[2]: http_push_module

pyromaniac January 27, 2010 05:38AM

Re[4]: http_push_module

akalend January 27, 2010 06:16AM

Re: Re[2]: http_push_module

Maxim Dounin January 27, 2010 07:00AM

Re: Re[2]: http_push_module

pyromaniac January 27, 2010 10:22AM

Re[4]: http_push_module

Pavel V. January 28, 2010 12:50PM

Re: Re[4]: http_push_module

pyromaniac January 28, 2010 01:28PM

Re: Re[4]: http_push_module

pyromaniac January 28, 2010 01:40PM

Re[6]: http_push_module

akalend January 28, 2010 05:46PM

Re: Re[6]: http_push_module

Sergey Shepelev January 28, 2010 06:04PM

Re[8]: http_push_module

akalend January 29, 2010 02:46AM

Re: Re[8]: http_push_module

pyromaniac January 29, 2010 03:08AM

Re: Re[8]: http_push_module

pyromaniac February 01, 2010 01:12PM

Re: Re[4]: http_push_module

Peter Leonov January 29, 2010 12:14AM

Re: Re[4]: http_push_module

pyromaniac January 29, 2010 01:22AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 295
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready