mod_lisp, cl-modlisp, and cl-kmrcl manually.</div></li><li>Add something like the below to httpd.conf and then restart apache<div><tt>LispServer 127.0.0.1 20123 "localhost"</tt></div><div><tt>AddHandler lisp-handler .lsp</tt></div></li><li>Start your Lisp implementation and load cl-modlisp with<div><tt>(asdf:operate 'asdf:load-op 'modlisp)</tt></div></li><li>Start the server with<div><tt>(ml:modlisp-start :port 20123)</tt></div></li><li>Try some demostration pages<div><tt>links http://localhost/fixed.lsp</tt></div><div><tt>links http://localhost/debug.lsp</tt></div></li><li>Shutdown the all cl-modlisp servers with<div><tt>(ml:modlisp-stop-all)</tt></div></li></ul><h2>Process Models</h2><p>There are two process models</p><ul><li><div><b>Each connection spawns a new thread</b></div><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.</div></li><li><div><b>Fixed pool of workers</b></div><div>This model is selected by passing the number of worker processes to <tt>init/listener</tt> with the keyword <tt>number-fixed-workers</tt>. 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.</div></li></ul><h2>Usage</h2><p>The demo.lisp file for examples of using cl-modlisp.</p></body><ul></ul><li><div><strong>Overview</strong></div><div>cl-modlisp is a multi-threaded handler for HTTP requests forwarded by Marc Battyani's (http://www.fractalconcept.com) mod_lisp Apache module.</div></li><li><div><strong>Design Goals</strong></div><div>cl-modlisp is designed as a thin layer to dispatch a mod_lisp request with multi-platform compatibility. Currently, cl-modlisp supports SBCL [multithreaded], CMUCL, AllegroCL, and Lispworks.</div></li><li><div><strong>Dispatch model</strong></div><div>Extremely simple: All requests are forwarded to a single processor that is passed as a parameter to cl-modlisp's start-up function.</div></li><li><div><strong>Configuration</strong></div><div>All configuration is set by passing keyword arguments to
modlisp-start</div><ul><li>port number - a number</li><li>processor - function designator which will receive all requests</li><li>processor-args - list of extra arguments to be passed to processor</li><li>timeout - NIL means never timeout otherwise number of seconds</li><li>catch-errors - non-NIL means to catch errors</li><li>number-fixed-workers - NIL means to spawn a new worker process for each request</li><li>remote-host-checker - optional function designator to check the remote host IP address. Used for filtering requests.</li></ul></li><li><div><strong>Processor function</strong></div><div>This function receives an argument of the 'command' alist and any
other arguments passed to modlisp-start as the :processor-args. The
mod_lisp, cl-modlisp, and cl-kmrcl manually.</div></li><li>Add something like the below to httpd.conf and then restart apache<div><tt>LispServer 127.0.0.1 20123 "localhost"</tt></div><div><tt>AddHandler lisp-handler .lsp</tt></div></li><li>Start your Lisp implementation and load cl-modlisp with<div><tt>(asdf:operate 'asdf:load-op 'modlisp)</tt></div></li><li>Start the server with<div><tt>(ml:modlisp-start :port 20123)</tt></div></li><li>Try some demostration pages<div><tt>links http://localhost/fixed.lsp</tt></div><div><tt>links http://localhost/debug.lsp</tt></div></li><li>Shutdown the all cl-modlisp servers with<div><tt>(ml:modlisp-stop-all)</tt></div></li></ul><h2>Process Models</h2><p>There are two process models</p><ul><li><div><b>Each connection spawns a new thread</b></div><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.</div></li><li><div><b>Fixed pool of workers</b></div><div>This model is selected by passing the number of worker processes to <tt>init/listener</tt> with the keyword <tt>number-fixed-workers</tt>. 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.</div></li></ul><h2>Usage</h2><p>The demo.lisp file for examples of using cl-modlisp.</p></body><ul></ul><li><div><strong>Overview</strong></div><div>cl-modlisp is a multi-threaded handler for HTTP requests forwarded by Marc Battyani's (http://www.fractalconcept.com) mod_lisp Apache module.</div></li><li><div><strong>Design Goals</strong></div><div>cl-modlisp is designed as a thin layer to dispatch a mod_lisp request with multi-platform compatibility. Currently, cl-modlisp supports SBCL [multithreaded], CMUCL, AllegroCL, and Lispworks.</div></li><li><div><strong>Dispatch model</strong></div><div>Extremely simple: All requests are forwarded to a single processor that is passed as a parameter to cl-modlisp's start-up function.</div></li><li><div><strong>Configuration</strong></div><div>All configuration is set by passing keyword arguments to
modlisp-start</div><ul><li>port number - a number</li><li>processor - function designator which will receive all requests</li><li>processor-args - list of extra arguments to be passed to processor</li><li>timeout - NIL means never timeout otherwise number of seconds</li><li>catch-errors - non-NIL means to catch errors</li><li>number-fixed-workers - NIL means to spawn a new worker process for each request</li><li>remote-host-checker - optional function designator to check the remote host IP address. Used for filtering requests.</li></ul></li><li><div><strong>Processor function</strong></div><div>This function receives an argument of the 'command' alist and any
other arguments passed to modlisp-start as the :processor-args. The