lisp src webserver.lisp的土地

时间:2012-11-29 08:45:35

标签: webdev.webserver usocket land-of-lisp

当我在“lisp的土地”第12章和第13章学习关于“插座”的时候。 我使用lispbox,所以我需要安装一个socket。最后,我发现 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))))

1 个答案:

答案 0 :(得分:0)

API定义

  • usocket(class)
  • stream-usocket(class; usocket derivative)
  • stream-server-usocket(class; usocket derivative)
  • socket-connect(function)[创建一个活动/连接的套接字] socket-connect主机端口和键元素类型   其中`host'是一个矢量化的ip                   或者虚线ip地址的字符串表示                   或DNS系统中用于查找的主机名
  • socket-listen(function)[创建被动/侦听套接字]  socket-listen主机端口& key reuseaddress backlog element-type    其中`host'与上面的定义相同
  • socket-accept(方法)[创建活动/连接套接字]  socket-accept socket& key element-type    返回(服务器端)从a派生的连接套接字    听/被动插座。
  • socket-close(方法) 插座关闭插座   socket先前返回的套接字
  • socket(usocket slot accessor),   内部/实现定义的套接字表示
  • socket-stream(usocket slot accessor), 套接字流套接字   返回值满足普通流接口