use: (import (igropyr http))
server
procedure: (server get post set listen)
return: unspecified
server过程开启服务器监听。
前两个参数接受一个过程,分别是服务器接受到GET和POST请求的回调。如:(request do-when-request)
后两个参数接受一个association list,开启监听之前服务器读取链表中特定字段对服务器进行配置。
后两个链表的结构分别为接受一个以'staticpath,'connection,'keepalive为key的key-value list和一个以'ip, 'port为key的key-value list。
使用server的例子如下:
(server
(request do-when-get-request)
(request do-when-post-request)
(set)
(listen))
request
procedure: (request callback)
(func list -> string -> string -> string) -> nothing
request 接受一个需要三个参数的过程作为回调。
在接受到GET请求时,request 将 request_header, path_info, query_string三个参数传给callback。
在接受到POST请求时,request 将 request_header, path_info, payload三个参数传给callback。
callback必须返回一个含有标准http头的字符串以备request调用 Igropyr 底层发送给客户端。
response
procedure: (response status type content)
int -> string -> string / list -> string
response接受三个参数,http状态码,返回类型和内容。其中status必须为数字,type为字符串。
当content为列表时,取第一个值为cookie,第二个值为返回内容。
当content为字符串时,cookie设置为“”
,content为返回内容。
response 将以上信息格式化为含有标准http头信息的字符串,通常用于构造request过程的回调。
sendfile
procedure: (sendfile type content)
return: string
sendfile接受两个参数,文件MIME类型和路径。
当type为""
时,服务器使用自动检测到的类型。
通常用于构造request过程的回调。
set
procedure: (set (name value) ...)
return: association list
set 接受任意数量用于配置服务器设置的s表达式。
name
的有效值有:
'staticpath
用于设定服务器静态文件路径。对应value为字符串,默认值为“”
。
'connection
用于设定服务器最大连接数。对应value为整形,默认值为 1024
'keepalive
用于设定服务器链接时长。对应value为整形,默认值为 5000
,当设为0
时为关闭长连接。
缺省设置会自动套用默认值。
listen
procedure: (listen)
procedure: (listen ip)
procedure: (listen port)
procedure: (listen ip port)
return: association list
listen 接受零至两个参数配置服务器监听ip和端口。
当listen接受一个字符串参数时,将其值用于设置监听ip。
当listen接受一个整形参数时,将其值用于设置监听端口。
当listen接受两个参数时,依次将其值用于设置监听ip和端口。
缺省值为:ip:0.0.0.0 port:80
errorpage
procedure: (errorpage error_code)
procedure: (errorpage error_code error_info)
return: string
errorpage接受一至两个参数,第一个参数是状态码,第二个参数是出错信息。
errorpage返回格式化好的含有标准http头信息的字符串,用于便捷的向客户端返回出错页面。
par
procedure: (par router_path request_path)
return: boolean
par 是一个高效的字符串模糊对比过程,返回布尔值。
它的第一个参数接受路由设置的路径,第二个参数接受访问请求路径。
当第一个参数含有*时,第二个参数从*对应字符开始至下一个/号的内容被忽略。
所以:
(par "/foo" "/foo") => #t
(par "/foo" "/bar") => #f
(par "/*" "/foo") => #t
(par "/foo/*" "/foo/bar") => #t
(par "/*/bar" "/foo/bar") => #t
(par "/f*/bar" "/foo/bar") => #t
(par "/f*/bar" "/boo/bar") => #f
(par "/foo/b*" "/foo/bar") => #t
(par "/foo/b*" "/foo/far") => #f
header-parser
procedure: (header-parser header key)
return: string
header-parser是一个用于在http-header中查找相应值的高效实现。
path-parser
procedure: (header-parser path index)
return: string
path-parser
返回路径中特定的字段。
(path-parser "/foo/bar/baz" 0) => "foo"
(path-parser "/foo/bar/baz" 1) => "bar"
(path-parser "/foo/bar/baz" 2) => "baz"
(path-parser "/foo/bar/baz" 3) => ""