<div dir="ltr">I'm a bit pressed for time but want to throw out a few incomplete thoughts on this. <div><br></div><div style>You will have a very difficult time doing IPC between worker processes unless you do IPC over a unix domain socket (and even then it sorta sucks). IMHO this is sub-optimal as this module has the ability to block the entire webserver on long running operations. </div>
<div style><br></div><div style>An example to frame this in would be preserving session state without a third party process like redis or memcached. Since you have LUA built, you may see better performance and footprint if you do the following: </div>
<div style><br></div><div style>- Create a shared dictionary at nginx init (example, perl-session-store). This dictionary will be shared across all nginx worker processes in memory.</div><div style>- Create an internal only LUA handler for setting/getting data out of the shared dictionary. </div>
<div style>- Implement some sort of locking mechanism in the above handler. </div><div style>- Use something like $r->internal_redirect to get/set data in and out of the above lua handler. </div><div style><br></div><div style>
In this way you can preserve something like session data across all workers. You could use something like Thaw and Freeze to serialize perl data types as well. </div><div style><br></div><div style>I haven't thoroughly thought through this design so there may be some 'gotchas' but my hope is to save you a few days of Perl IPC Frustration. The obvious caveat here is avoiding memory bloat by being conservative in the amount of data you jam into shared dicts. I foresee you will have issues using internal_redirect (I dont have the docs in front of me), so you may need to be creative here as the API is limited. I have a soft spot for perl but this module leaves a lot to be desired. You must be thoughtful in your design as to what will and will not block. </div>
<div style><br></div><div style>As a final thought, have you looked into <a href="http://zzzcpan.github.io/nginx-perl/">http://zzzcpan.github.io/nginx-perl/</a> ? this project appears to be in need of love and if memory serves makes some changes to nginx core which prevents upgrades, however, this project seems to support a lot of async perl operations that would make life easier. </div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 14, 2014 at 10:06 AM, David Coutadeur <span dir="ltr"><<a href="mailto:dcoutadeur@linagora.com" target="_blank">dcoutadeur@linagora.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Le 14/05/2014 18:58, Maxim Dounin a écrit :<div class=""><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello!<br>
<br>
On Wed, May 14, 2014 at 06:47:26PM +0200, David Coutadeur wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Hello,<br>
<br>
I am trying to build a perl access handler module into nginx, thanks to this<br>
API :<br>
<a href="http://nginx.org/en/docs/http/ngx_http_perl_module.html" target="_blank">http://nginx.org/en/docs/http/<u></u>ngx_http_perl_module.html</a><br>
but I have some difficulties to do so.<br>
<br>
Indeed, I would need some tools like<br>
- a mean to share variables between handlers,<br>
- a mean to call my handler at access phase.<br>
<br>
For example, I have made a basic handler in lUA with this more complete API<br>
:<br>
<a href="http://wiki.nginx.org/HttpLuaModule" target="_blank">http://wiki.nginx.org/<u></u>HttpLuaModule</a><br>
<br>
Does anybody have ideas on how to achieve the two functionnalities in the<br>
current perl API ?<br>
Will this lack of features for perl API be filled in the future ? In a near<br>
future ? Or do you advise other actions ?<br>
</blockquote>
<br>
Sharing variables (I believe you really want to do so between<br>
requests) can be done using normal Perl things like global<br>
variables (or, if you want many workers to share the same data,<br>
using shared memory, see various perl modules available on CPAN).<br>
</blockquote>
<br></div>
Yes, this is what I want to do. For example, loading some parameters from a config file, and store them in a shared memory place. Do you have some advice on a CPAN module which works best with nginx ?<div class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Calling the handler at access phase isn't something you can do<br>
without modifications of the code.  On the other hand, it may be a<br>
good idea to use auth request module[1] instead, and write a<br>
subrequest handler in embedded perl.<br>
<br>
[1] <a href="http://nginx.org/en/docs/http/ngx_http_auth_request_module.html" target="_blank">http://nginx.org/en/docs/http/<u></u>ngx_http_auth_request_module.<u></u>html</a><br>
<br>
</blockquote>
<br></div>
Ok, thank you, I will try this !<span class="HOEnZb"><font color="#888888"><br>
<br>
David</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
______________________________<u></u>_________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org" target="_blank">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" target="_blank">http://mailman.nginx.org/<u></u>mailman/listinfo/nginx</a><br>
</div></div></blockquote></div><br></div>