Memcached/JSONP
    Marcus Clyne 
    ngx.eugaia at gmail.com
       
    Mon Dec 21 14:25:27 MSK 2009
    
    
  
> Well, there's more than one way to do it, actually. A more concise and
> faster version is given below:
>
>     location /blah {
>         echo_before_body "$arg_callback(";
>
>         echo_duplicate 1 '{"dog":"$uri"}';
>
>         echo_after_body ")";
>     }
>
> The "echo_before_body" and "echo_after_body" directives work exactly
> in an output filter. And no extra cost of subrequests is needed here
> :D
>
> The output might be a bit ugly due to 1 extra new line:
>
>     ding1111111(
>     {"dog":"/blah/9999999.json"})
>   
What about :
location /blah {
        echo "$arg_callback({"dog":"$uri"})";
    }
?
:-)
That's only if the data can be generated from Nginx variables, though, 
which I was getting the impression it wasn't.
I was thinking of something like:
location /blah {
        echo "$arg_callback(";
        echo_location_async /subrequest
        echo ")";
    }
location /subrequest {
    (various options)
}
(as you previously suggested)
since if the data is not related to the request, it's probably better to 
store it elsewhere.
Inside the subrequest block, you could have a memcached pass (if the 
data is definitely going to be there), a try_files with memcached first 
/ fastcgi/proxy to update the data in memcached (if it might not be 
there), or a fastcgi/proxy pass, which utilizes Nginx's cache (this may 
be faster than using memcached to store the data).
Even better would be :
location /blah {
        echo -n "$arg_callback(";
        echo_location_async /subrequest
        echo -n ")";
    }
Where the '-n' works like the command-line version to not add a newline 
(a new feature perhaps?). :-)
Cheers,
Marcus.
    
    
More information about the nginx
mailing list