;;; -*- Mode: Lisp -*-
(in-package #:lml2)
(html-file-page ("readme")
(html
(:head
(:title "cl-modlisp readme")
((:meta :http-equiv "Content-Type" :content "text/html; charset=iso-8859-1"))
((:meta :name "Copyright" :content "Kevin Rosenberg 2002 "))
((:meta :name "description" :content "cl-modlisp documentation"))
((:meta :name "author" :content "Kevin Rosenberg"))
((:meta :name "keywords" :content "Common Lisp, mod_lisp, cl-modlisp, apache")))
(:body
(:h1 "cl-modlisp Documentation")
(:h2 "Overview")
(:p
"cl-modlisp provides the Lisp side of the interface to Marc Battyani's mod_lisp apache module ("
((:a :href "http://www.fractalconcept.com") "http://www.fractalconcept.com")
").")
(:h2 "Features")
(:ul
(:li "support of AllegroCL, CMUCL, SBCL with sb-thread, and Lispworks.")
(:li "listener and worker socket/process management so that shutting down the listener closes all related open sockets and terminates all related proceses.")
(:li "support for running multiple command processors on multiple ports.")
(:li "transparent support for precomputing the HTML or XML response to take advantage of HTTP/1.1's Keep-Alive feature. This is switchable with a single keyword argument to the macro "
(:tt "with-ml-page")
".")
(:li "Demonstration processor included"))
(:h2 "Prerequisites")
(:ul
(:li "Apache 1.3.x")
(:li "mod_lisp apache module ("
((:a :href "http://www.fractalconcept.com")
"http://www.fractalconcept.com")
").")
(:li "kmrcl library ("
((:a :href "http://files.b9.com/kmrcl")
"http://files.b9.com/kmrcl")
").")
(:li "asdf ("
((:a :href "http://www.sf.net/projects/cclan")
"http://www.sf.net/projects/cclan")
")."))
(:h2 "Supported Platforms")
(:ul
(:li "Allegro v6.2")
(:li "CMUCL 18e")
(:li "Lispworks v4.2")
(:li "SBCL 0.8.1 with sb-thread (multi-threading)"))
(:h2 "Quickstart")
(:ul
(:li "The easiest way to install is to use the Debian GNU/Linux operating system. Using the testing or unstable distributions, you can give the command:"
(:div
(:tt "apt-get install libapache-mod-lisp cl-modlisp cl-kmrcl"))
(:div
"If you are not using Debian, you will need to download and install
mod_lisp, cl-modlisp, and cl-kmrcl manually."))
(:li
"Add something like the below to httpd.conf and then restart apache"
(:div (:tt "LispServer 127.0.0.1 20123 \"localhost\""))
(:div (:tt "AddHandler lisp-handler .lsp")))
(:li
"Start your Lisp implementation and load cl-modlisp with"
(:div (:tt "(asdf:operate 'asdf:load-op 'modlisp)")))
(:li
"Start the server with"
(:div (:tt "(ml:modlisp-start :port 20123)")))
(:li "Try some demostration pages"
(:div (:tt "links http://localhost/fixed.lsp"))
(:div (:tt "links http://localhost/debug.lsp")))
(:li "Shutdown the all cl-modlisp servers with"
(:div (:tt "(ml:modlisp-stop-all)"))))
(:h2 "Process Models")
(:p "There are two process models")
(:ul
(:li (:div (:b "Each connection spawns a new thread"))
(:div "This is the default model. Each new connection to listener socket spawns a new connection. This allows for an arbitrary number of concurrent connections. This has advantages if the workers require a long execution time."))
(:li (:div (:b "Fixed pool of workers"))
(:div "This model is selected by passing the number of worker processes to "
(:tt "init/listener")
" with the keyword "
(:tt "number-fixed-workers")
". This model has a lower overhead since new processes are not created and destroyed with each connection. It has advantages when the workers have a short execution time.")))
(:h2 "Usage")
(:p "The demo.lisp file for examples of using cl-modlisp.")
)))