[hunchentoot-devel] Hunchentoot refactoring status report

Hans Hübner hans at huebner.org
Thu Apr 17 09:55:50 UTC 2008


Hi,

I have made a first round through Hunchentoot with the goals being:

- Remove system specific code, relying on common compatibility libraries instead
- Make single threaded operation a run-time option
- Add timeout support for more platforms
- Factor out SSL specific code so that conditional code is reduced
- Remove mod_lisp support to ease refactoring and simplify the code

I met most of these goals:

- Instead of using functions from port-*.lisp, Hunchentoot now depends
  on bordeaux-threads for multiple thread support and on usocket for
  socket i/o.  The GET-BACKTRACE function still remains as being
  non-portable.

- Threading behavior is now controller by a CONNECTION-MANAGER.  Every
  SERVER object has one CONNECTION-MANAGER and delegates listening and
  connection processing to that instance.  Currently, there exist two
  CONNECTION-MANAGER classes: SINGLE-THREADED-CONNECTION-MANAGER
  listens and processes connections synchronously,
  ONE-THREAD-PER-CONNECTION-MANAGER listens in a separate thread and
  processes each connection in a new thread, as Hunchentoot did on
  multi-threaded platforms until now.  The API for START-SERVER
  supports a THREADED keyword argument for simplicity, but it may be
  desirable to implement other CONNECTION-MANAGER classes in the
  future (for example to pool threads and/or separate connection
  management from request execution).

Timeouts which are really an issue that is hard to solve, as there is
no cross-implementation agreement on what timeouts are and how they
should be implemented.  As I need to make progress, I have added a
platform specific SET-TIMEOUTS function which uses whatever mechanism
the Lisp platform offers.  I have removed the setting for separate
read and write timeouts as I don't think that it is really useful make
the distinction, but if someone has a really good use case, I may be
adding them.

I am currently testing my changes on more platforms and compilers.
CCL and SBCL work fine, Lispworks is under investigation, I'll also
look at CLISP later on.  If there are other platforms that you'd like
to see supported in the future, please check out the branch and send
me patches.

Branch SVN URL:

http://common-lisp.net/project/tbnl/svn/branches/hans

Trac URL for browsing:

http://trac.common-lisp.net/tbnl/browser/branches/hans

RSS URL for commits:

http://trac.common-lisp.net/tbnl/timeline?changeset=on&max=50&daysback=90&format=rss



More information about the Tbnl-devel mailing list