[hunchentoot-devel] socket-connector and ssl-socket-connector?

Sebastian Tennant sebyte at smolny.plus.com
Thu Sep 22 20:03:48 UTC 2011


Quoth Hans Hübner <hans.huebner at gmail.com>:
> On Thu, Sep 22, 2011 at 8:48 AM, Sebastian Tennant
> <sebyte at smolny.plus.com> wrote:

>> At one point I considered hunchentoot-vhost but decided against it.  It
>> seemed quite complex (at least to me).

> I am using squid as a frontend to pretty much the same effect (I use
> it for SSL processing, too).

Cool.  I've never tried squid but I'll definitely have a look at it now, if I
ever find time!

> Sadly, I have not made progress regarding the changing the architecture of
> Hunchentoot in ways that would decouple request handling from accepting.
> What would really be needed is a request routing concept that is orthogonal
> to request handling.  Virtual host handling would then become part of the
> request routing.

IMHO, the fact that there's only a single *dispatch-table* is 'the big thing'
that needs changing.

Adding a dispatch-table slot (with default value *dispatch-table*) to the
acceptor class would probably suffice, though it's probably not that simple.

My workaround uses the acceptor :name slot to store the name of the dispatch
table for that acceptor) and I then define a modified request dispatcher
function that binds *dispatch-table* accordingly:

 ;;; per-acceptor dispatch tables
 (defun choosing-list-request-dispatcher (request)
   (let ((*dispatch-table* (eval (acceptor-name *acceptor*))))
     (loop for dispatcher in *dispatch-table*
           for action = (funcall dispatcher request)
           when action return (funcall action)
             finally (setf (return-code *reply*) +http-not-found+))))

  ;;; initalise dispatch tables
  (defvar *exmaple-dot-com-dispatch-table* '(default-dispatcher))
  (defvar *foobar-dot-org-dispatch-table* '(default-dispatcher))
  
  ;;; acceptors             
  (defvar example-dot-com
     (make-instance
      'acceptor
      :name '*exmaple-dot-com-dispatch-table*
      :address "127.0.0.1" :port 49154
      :request-dispatcher 'choosing-list-request-dispatcher))

  (defvar foobar-dot-org
     (make-instance
      'acceptor
      :name '*foobar-dot-org-dispatch-table*
      :address "127.0.0.1" :port 49155
      :request-dispatcher 'choosing-list-request-dispatcher))

> Even though easy handlers are currently defined as acceptor subclass, I do
> not think that this is the best way to implement a framework on top of
> Hunchentoot.  I refactored easy handlers that way because it was the quickest
> way to make them optional, as I wanted to get the easy handler code out of
> the common code path used for all handlers.

I found easy handlers too difficult to use :) so I've never used them and
therefore can't really comment, although getting their code out of the common
code path sounds like a sensible thing to be doing.

> If you [...] require architectural microchanges within the current class
> layout, I'll gladly review pull requests

Noted.

> on github and also make them part of the main repository.

Sorry... isn't 'hunchentoot on github' and 'the main repository' one and the
same thing?

> I am also open to larger efforts if anyone has the time to do that.  This can
> happen on a github fork first and moved to the edicl repository once there is
> sufficient interest and movement.

Noted.

> For the long-promised, still-undated upcoming release of Hunchentoot, my
> focus is to stabilize the feature set that exists right now.

Might it not be a good idea to make an announcement with subject line
'Hunchentoot frozen pending imminent release - bugfixes welcome' or words to
that effect?

Seb
-- 
Emacs' AlsaPlayer - Music Without Jolts
Lightweight, full-featured and mindful of your idyllic happiness.
http://home.gna.org/eap





More information about the Tbnl-devel mailing list