Tcl("Tool Command Language",“工具命令语言”)一种 脚本语言。 由John Ousterhout创建,关于TCL的历史可以参考:源文档 <http://www.cnblogs.com/me-sa/articles/HistoryofTcl.html>
。 TCL易学,功能很强大。TCL经常被用于 快速原型开发,脚本编程, GUI和测试等方面。TCL念作 "tickle". Tcl的特性包括:
* 任何东西都是一条命令,包括语法结构(for, if等)。
* 任何事物都可以重新定义和重载。
* 所有的数据类型都可以看作字符串。
* 语法规则相当简单
* 提供事件驱动给Socket和文件。基于时间或者用户定义的事件也可以。
* 动态的域定义。
* 很容易用C, C++,或者Java扩展。
* 解释语言,代码能够动态的改变。
* 完全的Unicode支持。
* 平台无关。Win32, UNIX, Mac 上都可以跑。
* 和Windows的GUI紧密集成。
* 代码紧凑,易于维护。
TCL本身不提供面向对象的支持。但是语言本身很容易扩展到支持面向对象。许多C语言扩展都提供面向对象能力,包括XOTcl, Incr Tcl 等。另外SNIT扩展本身就是用TCL写的。
使用最广泛的TCL扩展是TK。 TK提供了各种OS平台下的图形用户界面GUI。连强大的Python语言都不单独提供自己的GUI,而是提供接口适配到TK上。另一个流行的扩展包是Expect. Expect提供了通过终端自动执行命令的能力,例如(passwd, ftp, telnet等命令驱动的外壳).
源文档 <http://baike.baidu.com/view/459615.htm>
官方发布的"最新"调试工具是2003年11月24日发布的ActiveTcl 8.4.5 .我使用的是Script.Net和配套的TCL扩展包,这个工具对于使用VS的人再熟悉不过了,界面和快捷键都如出一辙.还有ASED ,Visual TCL , spec TCL等工具可选.如果你喜欢用TCL写点小的可执行工具,Freewrap可以把TCL脚本转成可执行文件.
安装了Script.net和TCL扩展包之后开始页面会有一个TCL开发文档的帮助,介绍了TCL的基本语法.如果要深入学习就要参考Brent B.Welch 写的"Practical Programming in Tcl and Tk"以及John K.Ousterhout的"Tcl and the Tk Toolkit".
Tcl英文参考文档地址:http://tmml.sourceforge.net/doc/tcl/index.html
顺便说一下在搜索引擎里面找TCL的资料很容易找到电视机广告,建议使用"TCL 语言""TCL 开发"之类的检索词过滤一下.
1.一定要好好看看Tcl变量的那部分内容,经常出现漏写$符号的情况
2.Tcl 语法要求比较严格,比如if语句{一定要写在上一行,if和{中间有一个空格
3.在Tcl里面怎么获取时间?
set curtime [clock seconds]
set formattime [clock format $curtime -format {%D %T}]
时间的格式化参数如下:
%% Insert a %.
%a Abbreviated weekday name (Mon, Tue, etc.).
%A Full weekday name (Monday, Tuesday, etc.).
%b Abbreviated month name (Jan, Feb, etc.).
%B Full month name.
%c Locale specific date and time.
%d Day of month (01 - 31).
%H Hour in 24-hour format (00 - 23).
%I Hour in 12-hour format (00 - 12).
%j Day of year (001 - 366).
%m Month number (01 - 12).
%M Minute (00 - 59).
%p AM/PM indicator.
%S Seconds (00 - 59).
%U Week of year (01 - 52), Sunday is the first day of the week.
%w Weekday number (Sunday = 0).
%W Week of year (01 - 52), Monday is the first day of the week.
%x Locale specific date format.
%X Locale specific time format.
%y Year without century (00 - 99).
%Y Year with century (e.g. 1990)
%D Date as %m/%d/%y.
%e Day of month (1 - 31), no leading zeros.
%h Abbreviated month name.
%n Insert a newline.
%r Time as %I:%M:%S %p.
%R Time as %H:%M.
%t Insert a tab.
%T Time as %H:%M:%S.
F5 Network公司是一个做服务器负载均衡设备的厂商.F5 BIG-IP LTM 的官方名称叫做本地流量管理器,可以做4-7层负载均衡,具有负载均衡、应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、 IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、 Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙—包过滤、包消毒等功能。
对于asp.net开发者iRule不是什么新东西,我的理解它就像写HTTPModule:使用Tcl语言编写脚本在适当的时机拦截处理HTTP请求.LTM提供了一套完整的HTTP扩展命令,我们可以很容易取得URI::protocol URI::path HTTP::cookie之类的内容,还有加密解密解码编码应有尽有.所有扩展命令的列表在:http://devcentral.f5.com/wiki/default.aspx/iRules/commands.html
对于插入iRule的时机我们控制在:
HTTP_REQUEST 系统完全解析整个客户机请求标头时触发。此处所说标头是指
方法、URI、版本和所有标头,不包括请求正文。
HTTP_REQUEST_DATA 请求接收到新的HTTP 内容数据时触发。
HTTP_RESPONSE 系统解析服务器响应中的所有响应状态和标头行时触发。
HTTP_RESPONSE_DATA 系统从响应中接收到新的HTTP 内容数据时触发。
HTTP_RESPONSE_CONTINUE系统从服务器接收到100 Continue 响应时触发。
# Rename a cookie by inserting a new cookie name with the same value as the original. Then remove the old cookie.
when HTTP_REQUEST {
# Check if old cookie exists in request
if { [HTTP::cookie exists "old-cookie-name"] } {
# Insert a new cookie with the new name and old cookie's value
HTTP::cookie insert name "new-cookie-name" value [HTTP::cookie value "old-cookie-name"]
# Remove the old cookie
HTTP::cookie remove "old-cookie-name"
}
}
源文档 <http://devcentral.f5.com/Wiki/default.aspx/iRules/HTTP__cookie.html>
F5官方提供了一个编辑器iRule Editor这个编辑器有下列需要注意的:
点击一个server尝试在Properties页面应用iRule,这里如果出错很有可能是下列原因:
LTM 系统能够选择运用所编写的iRule 前,必须执行以下操作:
• 将iRule 分配给Real Server。
将iRule 分配给Real Server 时,表示该Real Server 参考该iRule,
这类似于Real Server 参考pool 或Profile。
• 确保Real Server 参考正确的Profile。
例如,如果iRule 包括事件声明HTTP_REQUEST,那么仅当Real
Server 参考HTTP Profile 类型时,LTM 系统才选择运用iRule.这里的HTTP Profile其实相当于底层类库需要显示的引用一下:
修改与实施缺省Profile 共分两步:
修改缺省Profile 的步骤
1. 在Main选项卡上,展开Local Traffic。
2. 点击Profiles
将打开HTTP Profile”屏幕。
3. 选择要修改的缺省Profile:
• 如果要修改http Profile,请点击名称http。
此操作将显示缺省http Profile的属性和设置。
• 如果要修改除HTTP Profile之外的缺省Profile,请在菜单栏上
点击相应的Profile菜单,选择Profile类型,然后点击Profile名
称。
此操作将显示该缺省Profile的属性和设置。
4. 根据需要修改设置。
5. 点击Update
不知道下一次写Tcl脚本是什么时候了... ...