2012-11-29 42 views
1

land當我在「lisp land」第12章和第13章中學習「socket」時。 我使用lispbox,所以我需要安裝一個socket.At最後,我發現usocket可用。 這是一個關於如何使用建立網絡服務器的示例。lisp src webserver.lisp

(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)))) 

回答

0

API定義

  • usocket(類)
  • 流usocket(類; usocket衍生物)
  • 流-server-usocket(class; usocket derivative)
  • 插座連接(函數)[以形成一有源/連接插座] 插座連主機端口&鍵元件型 其中`主機」是量化IP 或帶點的IP地址的字符串表示 或主機名的DNS系統
  • 插座聽(功能)[以產生被動/收聽插座]查找 插座聽主機端口&鍵reuseaddress積壓元件型 其中`主機」具有相同的定義如上
  • 套接字(方法)[創建一個活動/連接的套接字] 套接字接受pt插座&關鍵元素類型 返回(服務器端)來自 監聽/被動套接字的連接套接字。
  • 插座閉(方法) 插座靠近插座 其中插座先前所返回插座
  • 插座(usocket插槽存取), 內部/實現定義插座表示
  • 插座流(usocket插槽存取) , socket-stream socket 返回值滿足正常流接口