1

当我在“lisp 之地”第 12 章和第 13 章学习“socket”时。我使用的是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))))
4

1 回答 1

0

API 定义

  • usocket(类)
  • 流 usocket(类;usocket 衍生)
  • 流服务器 usocket(类;usocket 衍生)
  • socket-connect (function) [ to create an active/connected socket ] socket-connect host port &key element-type where `host' 是向量化的 ip 或点分 ip 地址的字符串表示或用于在 DNS 系统中查找的主机名
  • socket-listen (function) [ to create a passive/listening socket ] socket-listen host port &key reuseaddress backlog element-type where `host' 定义同上
  • socket-accept (method) [ to create an active/connected socket ] socket-accept socket &key element-type 返回(服务器端)从侦听/被动套接字派生的连接套接字。
  • socket-close (method) socket-close socket where socket 先前返回的套接字
  • socket(usocket 插槽访问器),内部/实现定义的套接字表示
  • socket-stream(usocket插槽访问器),socket-stream socket,返回值满足普通流接口
于 2012-11-29T08:54:39.697 回答