;;; -*- 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.") )))