[erlang-questions] Thoughts on EHE - the PHP killer

Edmond Begumisa <>
Mon Feb 20 22:52:40 CET 2012


On Tue, 21 Feb 2012 04:13:50 +1100, Tim Watson <>  
wrote:

> On 20 February 2012 12:23, Steve Vinoski <> wrote:
>>
>> There's really nothing like servlet filters. I guess the closest thing
>> -- admittedly not very close, though -- is the ability to add a
>> rewriter, which sits in the dispatch path, takes in the #arg, and can
>> produce a modified one if it wants to.
>>
>> Just off the top of my head, it seems like one could do something like
>> servlet filters with an appmod, I think. Register it on /, and give it
>> it's own dispatching configuration and allow plug-ins to register into
>> its request-reply path. It could then receive each request, arrange
>> the ultimate dispatch target (an appmod, a .yaws page, even a file) at
>> the end of plug-in chain, dispatch the #arg into the chain, and then
>> deliver the eventual reply back into Yaws. No doubt this would be
>> easier if it were built into Yaws, though, since reusing the existing
>> dispatch logic would be easier than writing your own.
>>
>
> Yes and presumably to do your webmachine-a-like you'll be using the
> internal dispatch like this anyway, right? But it would definitely be
> better for use the internal dispatch logic.

I presume that it's more URI-based modularity that you're looking for.  
Note that you can achieve this by using the "yapps" feature by splitting  
your web-application into small OTP applications. Actually, I find that  
this approach promotes more manageable and reusable code.

Using your first example. You could have several OTP applications handling  
auth(entic|oris)ation, accounts, payments, receipts, etc....

== yaws.conf ==
..

runmod = yapp

<server public>
   port = 8000
   listen = 0.0.0.0
   docroot = /PATH_TO_MAIN_DOC_ROOT/www
   arg_rewrite_mod = yapp
   <opaque>
     yapp_server_id = pub
     bootstrap_yapps = accounts, payments, receipts, auth
   </opaque>
</server>

<server admin>
   port = 8001
   listen = 0.0.0.0
   docroot = /PATH_TO_MAIN_DOC_ROOT/www
   arg_rewrite_mod = yapp
   <opaque>
     yapp_server_id = adm_gui
     bootstrap_yapps = yapp
   </opaque>
</server>
..

== PATH_TO_WEBAPP_OTP_APPS/accounts/ebin/accounts.app ==
..
{env, [
          {yapp_appmods,[{"show", accounts_show_controller},
			 "configure", accounts_conf_controller}]}
       ]},
..

== PATH_TO_WEBAPP_OTP_APPS/accounts/src/accounts_show_controller.erl ==
..
out(A) ->
..

== PATH_TO_WEBAPP_OTP_APPS/accounts/src/accounts_conf_controller.erl ==
..
out(A) ->
..

== PATH_TO_WEBAPP_OTP_APPS/accounts/priv/docroot/ ==
Has it's own docroot!


Now whenever http://server:8000/accounts/* is accessed, the accounts OTP  
application will handle it. If it's  
http://server:8000/accounts/configure/*, then the accounts application's  
appmod will handle it.

Then you write other OTP applications for payments, etc, etc. After a  
while, you'll find yourself moving little useful OTP yapp applications  
between projects.

> Also is there a straight
> API call back into YAWS for serving a request, especially a file one
> (so that sendfile will kick in if configured) ?
>

To preempt his response: the hard work has already been done...

http://steve.vinoski.net/blog/2009/01/05/sendfile-for-yaws/

- Edmond -

> BTW thanks for the feedback, this has been very useful and I'm going
> to start playing with YAWS properly now I think.
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions


-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/



More information about the erlang-questions mailing list