TclHttpd是一个用Tcl语言开发的Web服务器。
可以到 TclHttpd 官方网站下载。推荐下载StarKit包。
"tclhttpd3.5.1.kit"文件的大小是850KB左右。
tclkit tclhttpd.kit -docRoot . -port 80 -host localhost
上面的命令启动TclHttpd服务器,监听本地主机的80端口,以当前目录作为根目录(DocumentRoot)。
如果省略-docRoot选项,则使用内置的根目录,会显示相关文档。
tclkit tclhttpd.kit -port 80 -host localhost
Doc_Root /usr/local/htdocs
Doc_AddRoot /foobar /some/path/to/foobar
Doc_PublicHtml public_html ;# http://server/~user/
Doc_IndexFile index.{html,shtmll}
Log_SetFile /usr/local/tclhttpd/log
Log_FlushMinutes minutes ;# buffer is used for log
Httpd_Server 80 localhost 127.0.0.1
Url_PrefixInstall / [list DocDomain $Doc(root)] ;# 默认的文件服务
Url_PrefixInstall /cgi-bin [list CgiDomain $directory] ;# CGI服务
### TclHttpd 内置的控制器
proc DocDomain {directory sock suffix} {
...
}
proc CgiDomain {directory sock suffix} {
...
}
proc DirectDomain {directory sock suffix} {
...
}
直接映射URL请求到Tcl procedure
Direct_Url /status Status
Direct_Url /mail Mail
proc Status/hello {args} {
return "hello"
}
proc Mail {email subject args} {
# $email 和 $subject 的值来自表单提交数据
# $args 的值来自其余的表单数据
... ...
}
TclHttpd服务器在得到请求的文档的MIME类型后,会检查并调用(如果其存在)相应的文档类型处理器。
文档类型MIME是根据文档后缀来推断的。文件"mime.types"描述了文件名后缀到MIMI的映射关系。
### TclHttp 内置的文档类型处理器
proc Doc_application/x-cgi {path suffix sock} {
...
}
proc Doc_application/x-imagemap {path suffix sock} {
...
}
proc Doc_application/x-tcl-subst {path suffix sock} {
...
}
proc Doc_application/x-server-include {path suffix sock} {
...
}
请求"/some/path/file.html"时,会检查是否有相就的"file.tml"文件存在。如果有,则执行".tml"文件,并缓存其结果作为".html"文件的内容。
### File: file.tml [Doc_CheckTemplates true] ;# 推荐设置为true;默认值是false [DynamicOnly]
TclHttpd执行模板文件"file.tml"时,会逐层目录网上寻找(从下往上)并加载(从上往下)目录下的".tml"文件。
可以通过Tcl的C扩展 Thread 来支持线程。
可以通过Tcl的扩展库 TLS来支持 https/SSL。
TclHttpd的官方网站也提到了 OpenSSL 或 BSAFE 的扩展库。