Otter 水獭(基于twisted的高速、可扩展性二进制流框架)
开发团队:Zoom.Quiet、zhaoxin、HD
-- hd [2004-08-14 01:17:55]
Contents
前言
Otter的来源是在为PyUSS书写测试程序时的小框架,因为在网络应用中会大量使用基于TCP的二进制流通信,所以将这个小框架正式变为一个独立的项目,成为以后相关应用的开发基础。
|
Woodpecker.Otter |
|
目标
面对Twisted 完善的网络应用开发框架组织,我们灵机一动,将 Twisted 最典型,最基础也最灵活的 二进制流TCP 传输应用,通过简单的XML模板来自动生成,将会极大的规范化,标准化,可控制化网络应用的快速开发!
子项目
/OtterBase 二进制流通讯框架
/OtterTool 二进制流通讯协议、报文、应用框架工具
/OtterTemplet 以Python脚本为解析目标的易用模板模块
开发基础
- python 跨平台、易使用的开发语言
- twisted 基于python的高可用性、高可扩展性、高性能的网络框架
开发知识
Python-based Template Packages -- Python 的模板模块
XML的大量应用!
XML语言及其应用ppt
using.xml.schema.(2001)
使用手册
XMLSpyHowto -- 强力XML.XSL.XSLT等等设计开发环境!
TODO List
- 为otter加入变长字段的支持
- 为otter tools寻找一个最为合适的模板方法
- 为otter tools寻找一个最为合适好用且通用的xml解析工具
- otter tools的IDE嵌入开发
- otter tools支持生成文档的功能
发布
Otter下载
/OtterDownload -- 下载说明
讨论·广告
精巧的思想,简单的表现,丰富的应用!
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
Otter核心
高负载网络的流量控制
- Otter的灵魂在于她的应用, 而流量控制非常重要. 先贴一些参考资料~~
ABR流量控制中的变结构控制器 http://www.jos.org.cn/1000-9825/14/562.htm 二进制流量控制算法的性能分析 http://www.jos.org.cn/1000-9825/14/612.htm
Otter技术路线讨论
1.0a阶段的反思
- 040821 经过一周的快速开发,基本实现最简单的Otter 目标;
- 其中也发现了进一步的需求,与问题;特此重新思考下一阶段的开发
XML设计
咳咳!作了才知道,XML不经过精巧的设计,使用时真的会非常的难受....
- ..... IBM 的XML专栏中有专门的介绍,我们需要时间来消化应用哪!先如此,让 Otter 跑起来吧!
XML解析
根据 todolist 的精神,重点应该是好用!而不是通用!
- 应该,通用的不一定好用;
- 好用的现在不一定是通用的;以后也说不定!
Python中XML的处理
分析现在针对XML数据库,Py视野中的处理思路
直接使用Py实现W3C建议XML处理
- minidom
- pulldom
- expat
- SAX
- PyXML 集合包
- ...
将XML的数据直接映射到Py类型数据中
- 即,对象化XML树!以Py 看方式,然后就可以开始神奇的Py魔术!
借用其它语言的威力
4Suite 的 cDomlette(Ft.Xml.Domlette)用 C 语言构建 DOM 树,避免了使用 Python 回调
RXP 解析器 ...pyRXP 和 LT XML,这两者利用了 RXP 速度上的优势,但又避免了 RXP 的复杂性
超越限制的解决
- 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 中表示的事情。
- 回避矛盾,以不完全的解决方式,来获得最大效益!
Otter的XML处理
- 综上,以及Otter的配置XML的特点:
- 不会太大;
- 不要求创建处理;
- 不会反复读取;
- Otter 的XML解析处理的原则应该是:
- 快捷;
- 轻量级别;
- 代码简单,容易理解;
ElementTree的理由
- 是支持DOM 解析的所有Py 解析包中最快的
- 足够清晰,简单;
足够轻量!只有一个文件,可以单独包含在/OtterTool发行中
未来的选择
根据/OtterBase的进化,如果目标代码复杂到一定程度,可惜考虑其它解析包
- 而且XML解析包的选择是于模板解析解决方案紧密关联的,不应该分别考虑
模板实现
根据个人开发感受,整理模板实现思路
Otter/OtterTemplet -- 专门讨论页面
目标结构
- 仓促启动,模块的目录,文件约定都是在开发中变动者,现在应该统一下来:
- 注意!:
+--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
}}}