lisp开发http开发探险记录(启航)

简介: lisp不缺乏共享资源,下面是http开发能用到的资源 http server: s-http-server ucw.httpd http-services woo cl-http portableAserve Hunchentoot 这次选择slime+sbcl+
这次选择slime+sbcl+emacs+quicklisp作为探险的装备,Hunchentoot作为起点

Huncentoot

Huncentoot是一个http server.


; SLIME 2015-12-13
CL-USER> (ql:quickload "hunchentoot")
To load "hunchentoot":
  Load 1 ASDF system:
    hunchentoot
; Loading "hunchentoot"
.............
("hunchentoot")
CL-USER> (hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242))
CL-USER> (hunchentoot:define-easy-handler (say-yo :uri "/yo") (name)
  (setf (hunchentoot:content-type*) "text/plain")
  (format nil "Hey~@[ ~A~]!" name))
SAY-YO
CL-USER>


现在lisp的http服务已经启动了,点击下面地址访问看看


http://127.0.0.1:4242/

http://127.0.0.1:4242/yo?name=Dude


Clack

lisp有很多http server真眼花缭乱,现在有了这个clack可以把各种http服务统一到一个框架里来.clack是一个抽象层,下层可以使用各种http服务实现.


CL-USER> (ql:quickload :clack)
To load "clack":
  Load 1 ASDF system:
    clack
; Loading "clack"
....
(:CLACK)
CL-USER> (clack:clackup
  (lambda (env)
    '(200
      (:content-type "text/plain")
      ("Hello, Clack!"))))
; in:
;      CLACK:CLACKUP (LAMBDA (ENV)
;                  '(200 (:CONTENT-TYPE "text/plain") ("Hello, Clack!")))
;     (LAMBDA (ENV) '(200 (:CONTENT-TYPE "text/plain") ("Hello, Clack!")))
;
; caught STYLE-WARNING:
;   The variable ENV is defined but never used.
;
; compilation unit finished
;   caught 1 STYLE-WARNING condition
To load "lack-middleware-backtrace":
  Load 1 ASDF system:
    lack-middleware-backtrace
; Loading "lack-middleware-backtrace"

To load "clack-handler-hunchentoot":
  Load 1 ASDF system:
    clack-handler-hunchentoot
; Loading "clack-handler-hunchentoot"
.............
Hunchentoot server is started.
Listening on localhost:5000.
#S(CLACK.HANDLER::HANDLER
   :SERVER :HUNCHENTOOT
   :ACCEPTOR #<SB-THREAD:THREAD "clack-handler-hunchentoot" RUNNING
                {1005AA5313}>)
CL-USER>


点击下面连接,看看效果

http://localhost:5000/


Caveman2

这是一个web应用开发框架.首先安装下面几个asdf system,


(ql:quickload :envy)

(ql:quickload :datafly)

(ql:quickload :caveman2)


创建一个web应用


(caveman2:make-project #P"~/common-lisp/myapp/" :author "www")


载入刚刚创建的web应用,并启动:


 (require "myapp")

(myapp:start :port 8080)


点击下面链接

http://localhost:8080



到此把整个http开发的框架架好了.



活在lisp里

启动web应用

CL-USER> (require :myapp)
;;; Computing Hangul syllable names
("SB-ROTATE-BYTE" "IRONCLAD" "ITERATE")
CL-USER> (myapp:start :port 8080)
To load "myapp":
  Load 1 ASDF system:
    myapp
; Loading "myapp"

To load "lack-middleware-accesslog":
  Load 1 ASDF system:
    lack-middleware-accesslog
; Loading "lack-middleware-accesslog"

To load "lack-middleware-session":
  Load 1 ASDF system:
    lack-middleware-session
; Loading "lack-middleware-session"

To load "lack-middleware-static":
  Load 1 ASDF system:
    lack-middleware-static
; Loading "lack-middleware-static"

To load "lack-middleware-backtrace":
  Load 1 ASDF system:
    lack-middleware-backtrace
; Loading "lack-middleware-backtrace"

To load "clack-handler-hunchentoot":
  Load 1 ASDF system:
    clack-handler-hunchentoot
; Loading "clack-handler-hunchentoot"
..
Hunchentoot server is started.
Listening on localhost:8080.
#S(CLACK.HANDLER::HANDLER
   :SERVER :HUNCHENTOOT
   :ACCEPTOR #<SB-THREAD:THREAD "clack-handler-hunchentoot" RUNNING
                {1009D62123}>)
CL-USER>


进入web

CL-USER> (in-package :myapp.web)
#<PACKAGE "MYAPP.WEB">


创建一个路由


(defroute "/welcome" (&key (|name| "Guest")) (format nil "Welcome, ~A" |name|))


点击

http://localhost:8080/hello




参考的资源

Is it feasible to do (serious) web development in Lisp?

http://stackoverflow.com/questions/556456/is-it-feasible-to-do-serious-web-development-in-lisp

Best web framework in Common-lisp?

http://stackoverflow.com/questions/540953/best-web-framework-in-common-lisp


lisp不缺乏共享资源,下面是http开发能用到的http服务器:


s-http-server ;;https://github.com/svenvc/s-http-server

ucw.httpd ;;https://github.com/erikg/ucw-core

woo ;;https://github.com/fukamachi/woo

portableAserve ;;http://franz.com/support/documentation/current/doc/aserve/aserve.html

Hunchentoot ;;http://weitz.de/hunchentoot/

cl-http ;;访问不了主站












目录
相关文章
|
3月前
|
XML 存储 网络协议
kettle开发篇-Http client
kettle开发篇-Http client
89 0
|
1月前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。
|
6月前
|
Go
Golang 语言怎么使用 net/http 标准库开发 http 应用?
Golang 语言怎么使用 net/http 标准库开发 http 应用?
26 0
|
2月前
|
Linux 开发工具 git
【开发专题_03】unable to access ‘https://github.com/deviantony/docker-elk.git/‘: Failed connect to github
【开发专题_03】unable to access ‘https://github.com/deviantony/docker-elk.git/‘: Failed connect to github
|
3月前
|
Web App开发 网络协议 Linux
Linux C/C++ 开发(学习笔记十 ):实现http请求器(TCP客户端)
Linux C/C++ 开发(学习笔记十 ):实现http请求器(TCP客户端)
49 0
|
4月前
|
网络协议 前端开发 应用服务中间件
PythonWeb开发基础(一)B/S开发和http协议
PythonWeb开发基础(一) B/S开发和http协议 推荐书籍:《HTTP权威开发指南》 前端:数据的格式化呈现,python中的format函数其实就在做这件事情。
22 0
|
4月前
|
缓存 Android开发 数据安全/隐私保护
android开发,使用kotlin学习HTTP访问网络
android开发,使用kotlin学习HTTP访问网络
73 0
|
4月前
|
XML Java Android开发
Android Studio App开发之网络通信中使用POST方式调用HTTP接口实现应用更新功能(附源码 超详细必看)
Android Studio App开发之网络通信中使用POST方式调用HTTP接口实现应用更新功能(附源码 超详细必看)
61 0
|
4月前
|
XML Java 定位技术
Android Studio App开发之网络通信中使用GET方式调用HTTP接口的讲解及实战(附源码 超详细必看)
Android Studio App开发之网络通信中使用GET方式调用HTTP接口的讲解及实战(附源码 超详细必看)
57 0
|
6月前
|
中间件 测试技术 数据库
软件测试|测试平台开发-Flask 入门:Flask HTTP请求详解
软件测试|测试平台开发-Flask 入门:Flask HTTP请求详解
41 0