[gambit-list] Web design with gambit question

Marc Feeley feeley at iro.umontreal.ca
Wed Nov 25 12:47:32 EST 2009


On 2009-11-25, at 12:31 AM, Alfonso Urroz wrote:

> Marc, I know you have answered this before, but I just wanted to know, where is the web application file or files on Gambit Scheme?

I posted the following message to comp.lang.scheme not too long ago with the code for a barebones HTTP server.

Marc


Here's a barebones HTTP server for Gambit.  It should be fairly 
obvious how to extend this to your specific requirements, such as 
handling forms.  If you need something more general check out the 
examples/web-server directory in the Gambit source code distribution. 

Marc 

;;; File: "simple-http-server.scm" 

(define http-server-address "*:8000") ;; "*:80" is standard 

(define (http-server-start) 
  (let ((accept-port 
         (open-tcp-server (list server-address: http-server-address 
                                eol-encoding: 'cr-lf)))) 
    (let loop () 
      (let ((connection (read accept-port))) 
        (if (not (eof-object? connection)) 
            (begin 
              (http-serve connection) 
              (loop))))))) 

(define (http-serve connection) 
  (let ((request (read-line connection))) 
    (if (string? request) 
        (let* ((r 
                (call-with-input-string 
                 request 
                 (lambda (p) 
                   (read-all p (lambda (p) 
                                 (read-line p #\space)))))) 
               (method 
                (car r))) 
          (cond ((string-ci=? method "GET") 
                 (http-get connection (cadr r))) 
                (else 
                 (println "unhandled request: " request))))) 
    (close-port connection))) 

(define (http-get connection document) 
  (print port: connection 
         "HTTP/1.0 200 OK\n" 
         "Content-Type: text/html; charset=ISO-8859-1\n" 
         "Connection: close\n" 
         "\n" 
         "<pre>\n" 
         "document requested: " document "\n" 
         "</pre>\n")) 

(http-server-start) 



More information about the Gambit-list mailing list