земля lisp src webserver.lisp

в то время как я учился в главе 12 и 13 "land of lisp" о "сокете". Я использую lispbox, поэтому мне нужно установить сокет. Наконец-то я нашел usocket доступным. это пример использования usocket для создания веб-сервера.

(defun serve (request-handler)
  "serve as a web server,used to handle request 
   like 'http://127.0.0.1:8080/greeting'"
 (let ((socket (usocket:socket-listen "0.0.0.0" 8080 :reuse-address t)))
 (unwind-protect
   (loop (with-open-stream (stream 
                            (usocket:socket-stream 
                                      (usocket:socket-accept socket)))
            (let* ((url    (parse-url (read-line stream)))
                    (path   (car url))
                    (header (get-header stream))
                    (params (append (cdr url) 
                                    (get-content-params stream header)))
                    (*standard-output* stream))
               (funcall request-handler path header params))))
   (usocket:socket-close socket))))

исходная функция «обслуживания» в http://landoflisp.com/webserver.lisp

(defun serve (request-handler)
 (let ((socket (socket-server 8080)))
 (unwind-protect
   (loop (with-open-stream (stream (socket-accept socket))
             (let* ((url    (parse-url (read-line stream)))
                    (path   (car url))
                    (header (get-header stream))
                    (params (append (cdr url) 
                                    (get-content-params stream header)))
                    (*standard-output* stream))
               (funcall request-handler path header params))))
   (socket-server-close socket))))

person lin yuansen    schedule 29.11.2012    source источник


Ответы (1)


определение API

  • ussocket (класс)
  • stream-usocket (класс; производная от usocket)
  • stream-server-usocket (класс; производная от usocket)
  • socket-connect (функция) [для создания активного/подключенного сокета] socket-connect host port &key element-type, где `host' — это векторизованный ip или строковое представление IP-адреса с точками или имя хоста для поиска в системе DNS
  • socket-listen (функция) [для создания пассивного/прослушивающего сокета] socket-listen host port &key reuseaddress тип элемента невыполненной работы, где `host' имеет то же определение, что и выше
  • socket-accept (метод) [для создания активного/подключенного сокета] socket-accept socket &key element-type возвращает (на стороне сервера) подключенный сокет, полученный из слушающего/пассивного сокета.
  • socket-close (метод) socket-close socket, где socket — ранее возвращенный сокет
  • сокет (аксессуар слота usocket), представление сокета, определенное внутренне/реализацией
  • socket-stream (аксессор слота usocket), сокет socket-stream, возвращаемое значение которого удовлетворяет обычному потоковому интерфейсу
person lin yuansen    schedule 29.11.2012