TclHttpd Web服务器使用概要

风行水上 @ 2014-11-15 16:21:00
标签:

    TclHttpd是一个用Tcl语言开发的Web服务器。

    • 完全使用Tcl语言开发(不依赖二进制库)。
    • 其早期版本可以追溯到Tcl 7.5时期。
    • 目前最官方的最新版本是 3.5.1 May 27, 2004。 (你没看错,2004年以来,再无更新)
    • Tcl的官方网站 www.tcl.tk 运行在TclHttp之上。(服务器当前状态
    • 使用非阻塞的(Non-Blocking)、事件驱动的I/O(Event-Driven I/O)。(就是Node.js引以为荣的那个)
    • 非阻塞的CGI程序调用(还不支持Fast CGI,但已经很接近其思想)

    TclHttpd 下载

    可以到 TclHttpd 官方网站下载。推荐下载StarKit包。

    "tclhttpd3.5.1.kit"文件的大小是850KB左右。

    TclHttpd 服务器启动

    tclkit tclhttpd.kit -docRoot . -port 80 -host localhost
    

    上面的命令启动TclHttpd服务器,监听本地主机的80端口,以当前目录作为根目录(DocumentRoot)。

    如果省略-docRoot选项,则使用内置的根目录,会显示相关文档。

    tclkit tclhttpd.kit -port 80 -host localhost
    

    TclHttpd 基本配置

    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
    

    TclHttpd 路由控制器

    全局URL路由 (URL Domain Handlers)

    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路由 (Application Direct URL)

    直接映射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 的值来自其余的表单数据
      ... ...
    }
    

    文档类型处理 (Document Type Handler)

    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]
    

    Per Directory .tml 文件

    TclHttpd执行模板文件"file.tml"时,会逐层目录网上寻找(从下往上)并加载(从上往下)目录下的".tml"文件。

    线程支持(Thread Support)

    可以通过Tcl的C扩展 Thread 来支持线程。

    SSL支持

    可以通过Tcl的扩展库 TLS来支持 https/SSL。

    TclHttpd的官方网站也提到了 OpenSSL 或 BSAFE 的扩展库。

    标签:

      分享到:
      comments powered by Disqus

      32/36ms