Otter 水獭(基于twisted的高速、可扩展性二进制流框架)
开发团队:Zoom.Quiet、zhaoxin、HD
-- hd [2004-08-14 01:17:55]
1. 前言
Otter的来源是在为PyUSS书写测试程序时的小框架,因为在网络应用中会大量使用基于TCP的二进制流通信,所以将这个小框架正式变为一个独立的项目,成为以后相关应用的开发基础。
|
Woodpecker.Otter |
|
1.1. 目标
面对Twisted 完善的网络应用开发框架组织,我们灵机一动,将 Twisted 最典型,最基础也最灵活的 二进制流TCP 传输应用,通过简单的XML模板来自动生成,将会极大的规范化,标准化,可控制化网络应用的快速开发!
1.2. 子项目
/OtterBase 二进制流通讯框架
/OtterTool 二进制流通讯协议、报文、应用框架工具
/OtterTemplet 以Python脚本为解析目标的易用模板模块
2. 开发基础
python 跨平台、易使用的开发语言
twisted 基于python的高可用性、高可扩展性、高性能的网络框架
3. 开发知识
Python-based Template Packages -- Python 的模板模块
XML的大量应用!
-
XML语言及其应用ppt
using.xml.schema.(2001)
-
4. 使用手册
XMLSpyHowto -- 强力XML.XSL.XSLT等等设计开发环境!
5. TODO List
为otter加入变长字段的支持
为otter tools寻找一个最为合适的模板方法
为otter tools寻找一个最为合适好用且通用的xml解析工具
otter tools的IDE嵌入开发
otter tools支持生成文档的功能
6. 发布
6.1. Otter下载
/OtterDownload -- 下载说明
7. 讨论·广告
精巧的思想,简单的表现,丰富的应用!
Otter! 快速架设稳定网络应用大坝的 水獭 !
otter与otter tools的关系及实现讲义 otter_and_tool_0821.ppt
建议使用 RELAX NG 来更加精确的验证 XML, 提供伪脚本工具,通过类似Py 风格的脚本来自动生成合理的 XML,这样当 Otter Schema 升级时,也更加容易兼容原先的 XML!
Otter script--(OtterXML builder)-->Otter XML --(Otter engine)--> Twisted Python acript
8. Otter核心
8.1. 高负载网络的流量控制
Otter的灵魂在于她的应用, 而流量控制非常重要. 先贴一些参考资料~~ ABR流量控制中的变结构控制器 http://www.jos.org.cn/1000-9825/14/562.htm 二进制流量控制算法的性能分析 http://www.jos.org.cn/1000-9825/14/612.htm
9. Otter技术路线讨论
1.0a阶段的反思
040821 经过一周的快速开发,基本实现最简单的Otter 目标;
其中也发现了进一步的需求,与问题;特此重新思考下一阶段的开发
9.1. XML设计
咳咳!作了才知道,XML不经过精巧的设计,使用时真的会非常的难受....
..... IBM 的XML专栏中有专门的介绍,我们需要时间来消化应用哪!先如此,让 Otter 跑起来吧!
9.2. XML解析
根据 todolist 的精神,重点应该是好用!而不是通用!
应该,通用的不一定好用;
好用的现在不一定是通用的;以后也说不定!
9.2.1. Python中XML的处理
分析现在针对XML数据库,Py视野中的处理思路
9.2.1.1. 直接使用Py实现W3C建议XML处理
minidom
pulldom
expat
SAX
PyXML 集合包
...
9.2.1.2. 将XML的数据直接映射到Py类型数据中
-
即,对象化XML树!以Py 看方式,然后就可以开始神奇的Py魔术!
9.2.1.3. 借用其它语言的威力
4Suite 的 cDomlette(Ft.Xml.Domlette)用 C 语言构建 DOM 树,避免了使用 Python 回调
RXP 解析器 ...pyRXP 和 LT XML,这两者利用了 RXP 速度上的优势,但又避免了 RXP 的复杂性
9.2.1.4. 超越限制的解决
-
DOM 将 XML 每一样都融入到面向对象编程(OOP)框架中,在比其他任何专门编程语言更高的抽象层次上。DOM 是语言无关的,并且其“文档对象模型”是由许多通用编程语言的库提供的。在某种意义上,DOM 是语言 — 它指定了所有的方法和参数 — 而基本通用语言只不过是一点胶水。我的实用程序 xml_objectify, 曾在前面的专栏文章中讨论过,提供了一种将 XML 文档转换为更自然感觉的“OOP 化”对象(在 Python 中)的方法,主要是为了回应有点人造感觉的 DOM。
SAX 在其语言中性上与 DOM 相似,但它用事件驱动和过程化模型取代了 DOM 的 OOP 框架。SAX 在将 XML 文档作为流处理的能力上有非常好的特性,即根据遇到的每个元素和内容来进行处理。但随着其事件驱动原理带来了 SAX 的缺点,即没有由 XML 文档表示的数据结构的实际概念。我们可以在一个具体的应用程序中构建这样的结构,但即使如父/子这样简单的事物都必须以 SAX 库下面的编程语言的词汇表进行表示;SAX 本身对 XML 的大部分事情几乎一无所知。
XSLT 是,从某种意义上说,与 XML 的结构最匹配的常见技术。可以反映这种匹配的是,XSLT 文档本身就是 XML 文档实例。XSLT 是一种专门功能编程语言,允许您指定将 XML 文档转换成其它形式(特别是,但不仅是,转换成其它 XML 文档)。XSLT 除了有些冗长外,它的表达力也有所限制 — 您可说的事情可以清楚地表达(是功能地,不是过程地),但您很快增加许多无法简单地在 XSLT 中表示的事情。
-
回避矛盾,以不完全的解决方式,来获得最大效益!
9.2.2. Otter的XML处理
综上,以及Otter的配置XML的特点:
不会太大;
不要求创建处理;
不会反复读取;
Otter 的XML解析处理的原则应该是:
快捷;
轻量级别;
代码简单,容易理解;
9.2.2.1. ElementTree的理由
是支持DOM 解析的所有Py 解析包中最快的
足够清晰,简单;
足够轻量!只有一个文件,可以单独包含在/OtterTool发行中
9.2.2.2. 未来的选择
根据/OtterBase的进化,如果目标代码复杂到一定程度,可惜考虑其它解析包
而且XML解析包的选择是于模板解析解决方案紧密关联的,不应该分别考虑
9.3. 模板实现
根据个人开发感受,整理模板实现思路
Otter/OtterTemplet -- 专门讨论页面
9.4. 目标结构
仓促启动,模块的目录,文件约定都是在开发中变动者,现在应该统一下来:
注意!:
+--otterSample 目标代码示例文件目录
+--otterTemplet 模板文件存放目录
]tree OtTool +--doc epydoc 自动组织的API 文档 | +--api | | +--epydoc.css | | +--index.html | | +--.... | +--CHANGES | +--html | +--LICENSE | \--README +--OtTool.py 主调用入口类 +--OtXML.py XML解析类,处理Otter 配置 XML 文件 +--OtCUI.py Otter Tools Commend User Interface;命令行用户界面;用以处理各种命令行的响应操作 +--OtFiler.py 文件伺候包;专门用以进行文件,目录的操作 +--OtTemplet.py 模板解析包,现在为空类,由继承的类实际运行式 操作 +--OtTDict.py 字典匹配式模板解析类 +--OtTXML.py XML标签驱动模板解析类 +--timer.py 运行时间记录工具包 +--otterTemplet 模板文件存放目录 | +--lib | | +--messages | | | +--bytemsg.py | | | +--pcon-pmsg.py | | | +--scon-pmsg.py | | | \--__init__.py | | +--protocols | | | +--byteprotocol.py | | | +--pcon-p.py | | | +--scon-p.py | | | \--__init__.py | | \--__init__.py | +--gnsc.py | \--gnsd.py +--otterSample 目标代码示例文件目录 | +--lib | | +--messages | | | +--bytemsg.py | | | +--gnspmsg.py | | | +--usspmsg.py | | | \--__init__.py | | +--protocols | | | +--byteprotocol.py | | | +--gnsp.py | | | +--ussp.py | | | \--__init__.py | | \--__init__.py | +--ussc.py | \--ussd.py +--web 预备的CGI 接口目录 +--xml 预备的 Otter XML Schema 和示范 XML文件 | +--ottertools.xsd | \--uss.xml \--__init__.py