1

「land of lisp」の第 12 章と第 13 章で「socket」について学習していたときのことです。Lispbox を使っているので、ソケットをインストールする必要があります。これは、usocketを使用して Web サーバーを構築する方法に関するサンプルです。

(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の元の 'serve' 関数

(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 (クラス)
  • stream-usocket (クラス; usocket 派生)
  • stream-server-usocket (クラス; usocket 派生)
  • socket-connect (関数) [アクティブ/接続されたソケットを作成する] socket-connect host port &key element-type ここで、'host' はベクトル化された IP またはドット付き IP アドレスの文字列表現、または DNS システムで検索するためのホスト名です。
  • socket-listen (関数) [パッシブ/リッスン ソケットを作成する] socket-listen ホスト ポート &key reuseaddress backlog element-type ここで、「ホスト」は上記と同じ定義を持ちます
  • socket-accept (メソッド) [アクティブ/接続済みソケットを作成する] socket-accept ソケット &key element-type は、リスニング/パッシブ ソケットから派生した接続済みソケットを (サーバー側で) 返します。
  • socket-close (メソッド) socket-close socket where socket は以前に返されたソケット
  • ソケット (usocket スロット アクセサー)、内部/実装で定義されたソケット表現
  • socket-stream (usocket スロット アクセサ)、socket-stream ソケットの戻り値は、通常のストリーム インターフェイスを満たします
于 2012-11-29T08:54:39.697 に答える