分类: 系统运维
2009-09-15 09:21:12
一直想解决client端软件的UI开发问题.
因为要为ngus写一个通用的client. 用户可以通过它使用各种应用.
数据是在server端存在RDF,JCR和DB中的, 可以被所有应用共享, 有无穷的通用性和灵活性.
但是UI就没那么容易实现灵活性了.
在client的每一个tab代表了一个应用, 应用在UI上的表现形式应该是运行时决定的, 而不是hard-code的.
这就是一种介于thin-client 和fat-client之间的软件,其实browser就是一个这样的软件, 但是它存在的目的不一样, 处于的位置更加底层
要解决这样的一个问题, 设计这样的一个UI框架, 必须实现两个要素
1. UI语言, 比如html/css就是最早的UI语言, 用户可以使用它快速简单的编写UI, UI也可以从server得到, 以实现运行时决定UI.
2.
嵌入UI中的Script脚本语言, 用来处理事件, 实现UI和用户的交户, 比如javascript, flash的action
script等等, 但是所有的这种script的功能都很有限, 只能做非常简单的事, 并且不能操作本地资源, 比如文件系统等等.
和朋友讨论了一下, 目前有可能可以使用的有google Gear, XUL/JS, WxWidgets, yahoo widget等等.
不过同时想到了另个解决办法.就是 local web server:
这个web server是最简单的, 只需要实现cgi和http协议. ClientUI的每个tab将显示一个html/css/js或者xsl/xml/css/js写的页面. 每个应用对应一个页面.
比如, 用户新件一个叫做”todolist”的tag, 一个tag对应一个应用.
在
client端将增加一个叫做”todolist”的tab,
然后用户为这个tab选择UI(就是页面template),或者自己创建template, 将UI元素和数据在rdf中的属性相对应. 这样,
所有有”todolist”这个标签的数据都将显示在这个tab下, 并且可以被修改. 当用户修改数据后, js会调用local web
server 的cgi, 将数据存入本地cache, 然后异步更新到server. 这样, 用户的操作会非常快的得到响应.
其实很多应用, 比如google桌面等等, 多已经使用这种local web server 的方式, 用写页面的方式写UI, 同时又达到了本地访问的高效率.
看了看light weight web server的的开源方案, 主要是apache和vc的一个sample
另外, ibm又篇很好的文章, 收藏一下
http://www.ibm.com/developerworks/cn/web/wa-ltwebserv/index.html
轻量级 Web 服务器
作为 Apache 和其他市场领头产品的补充的专用 HTTP 应用程序
级别: 中级
Cameron Laird ([url=mailto:claird@phaseit.net?subject=轻量级]claird@phaseit.net[/url]), 副总裁, Phaseit, Inc.
2007 年 7 月 23 日
最 近几年,市场上出现了很多有趣的 Web 服务器实现,包括 lighthttpd、litespeed 和 mongrel 等。这些 Web 服务器都宣称结合了性能、易管理性、可移植性、安全性和其他相关价值。下面的工程研究将调查轻量级 Web 服务器,以帮助您选择最可能满足下一个项目的技术需求的 Web 服务器。
“轻量级” Web 服务器,例如 lighthttpd、 litespeed 和 mongrel,可以为项目带来很多的好处。本文调查这种可能性,并展示这些 Web 服务器的适用性。
一个 Web 服务器需要哪些东西?
第一个重要的方面是清楚地理解所调查的领域(请参阅 参考资料,以了解更详细的信息)。终端用户在 Internet 上的基本动作就是 “进入一个 Web 页面”。从大处讲,这牵涉到两个应用程序之间的协作:
所
有 Web 用户直接与浏览器交互,因此他们的选择和分析相应地有些狂热。而服务器只对站点的技术人员可见。根据 Netcraft
最近的调查,虽然存在很多不同的 Web 服务器,但是其中两种 Web 服务器就占据了 90% 的份额,这两种 Web 服务器是 Apache
和 Internet Information Server
(IIS)。它们都是经过高度锤炼的产品,并且声称不仅具有广泛的内在技术特性,而且有很多配套的书籍、增件、顾问、提供商等。那么,它们是否还有值得改
造的地方呢?
答案是肯定的。评价一个 Web 服务器的重要指标有:
Apache 和 IIS 不能同时在那么多的标准方面做到最好。理论上讲,显然那些定向的产品至少能在以上的一至两个方面超越市场领头产品。
关于轻量级 Web 服务器的一件有趣的、值得调查的事情是,它们之间的竞争远远不止是理论上的:仔细研究表明,它们有很多
东西可以提供,并且即使在很多常见的情况下,它们相对于 Apache 和 IIS
也坚持了自己的风格。虽然可以合理地认为市场领头产品已经经过了小心的优化,从而能够有效地在性能(举个例子)方面避免被击败,但是很多小型的竞争对手因
为只提供简单的静态 Web 页面服务,速度反而更快。当使用这些 Web 服务器运行测试时,您会感觉好像是在赛道上驾驶一辆 go-kart 小车,不知不觉竟然超过了 Porsche 和 Viper 车。这还不是全部:有时候,轻量级 Web 服务器可作为那些大哥级服务器的有效补充,而不只是与它们竞争。即使您知道自己将使用 Apache,有时候通过将它与一个轻量级伙伴搭档,反而可以最大限度地利用它。最好的解决方案有时候需要两个或更多 Web 服务器的协作。 Web 服务的轻巧性
本
调查中重点关注的 “轻巧性” 实际上是一种主观质量,就像 “艺术” 或 “风格”。它通常意味着简单、易于安装、流线化、要求低和健壮 —— 比
Apache 和 IIS 更小、更简单,当然,在试图满足大量市场的过程中,它们已经变得异常复杂。出于这个目的,虽然 Java Web
Server、AOLserver 和 Zeus 拥有迷人的可移植性和性能优势,但是它们的复杂性和大小使其不得不被拒之门外。
轻量级
Web 服务器可以适用于市场领头产品和其他 “重量级”
服务器无法胜任的情况。例如,整个服务器可以打包在一个文件中。这意味着开发人员可以方便地携带生产环境所需的所有工具。即使在生产服务器上运行的是
Apache,也仍然可以在宾馆的房间里,借助只需数秒钟就可以安装完毕的轻量级 Web 服务器以尝试新想法。而且,由于轻量级 Web
服务器要求很低,因此可以在那些无法负担 IIS 的主机上顺畅地运行。
单文件打包
Apache
需要小心地安装散布在多个目录中的很多文件。与之截然不同的是,下面的 Web 服务器却打包在一个可执行文件中。我的一个雇主 Phaseit
的专长是部署和打包,我们能使 Apache 的安装看上去比平常更简单一些。但是即使我们做得最好,Apache 或 IIS 与轻量级 Web
服务器在 “空间占用” 方面也仍然有很大的差异:前者要占用大量的空间。
小的、轻量级的 Web 服务器还可以在小功率的主机上良好地运行。在我们的公司(Phaseit —— 见 侧栏)
中,我们在远程的、条件欠佳或配置较低的环境中的工业计算机上运行专用的
硬件。在这些情况下,能够通过一个对处理能力或磁盘空间要求很低的应用程序来提供 Web 页面是一个很大的优势。这意味着我们的机器可以避免
Apache 的开发和处理能力所带来的开销,构建基于 Web 的管理控制台。
从某种程度上讲,几乎所有轻量级 Web
服务器都是开放源码的。如果我们需要某一款 Web 服务器所特有的行为,那么下面概述的一些 Web
服务器都非常小巧,易于理解,也易于增强,只有两个例外。这些 Web 服务器为嵌入 Web 服务的项目提供极好的原始材料,不管这些 Web
服务是在特殊的硬件中,还是在为在通用计算机上运行而设计的特定应用程序中。它们还广泛用于具有传统外观的 Web 站点:
下
面的例子说明了开发人员使用轻量级服务器的轻巧性:在我们公司,我们采用专门的硬件提供办公室电话解决方案。它基于定制的、以传统的 Linux®
应用程序的形式运行的软件。只需一个附加文件和一点 init.d 配置,很容易添加一个强大的 “Web 控制台”,该 Web
控制台能提供硬件和软件的管理界面。 终端用户可以从任何浏览器中监视和配置他们的计算机,而不必安排专门的硬件连接或解决使用 “垂直”
硬件时常见的其他复杂性。
面向服务架构(SOA)被认为难以使用。在我们的经验中,SOA 至少有一部分这方面的缺点阻碍了 Web 服务的使用。我们利用轻量级 Web 服务来设置快速的 SOA,以进行演示。
轻
量级服务器甚至可以用于生产数据中心,包括前面列出的 high-profile
站点。性能非常高的站点会将操作分开,从而最大限度地利用缓存、代理等技术。例如,一个基于 Apache 的站点可能采用一种这样的架构:通过小型的
Web 服务器从专用的文件系统提供缓慢变化的图片。终端用户看到的结果实际上是 Apache 和一个或多个辅助 Web
服务器通过协作得到的输出,它们各自担任自己擅长的角色。这样的安排可以以非常低的计算成本提供非常 快的结果。 手段和目的
虽
然轻量级 Web 服务器有很多共同之处,但是各有各的不同。大多数轻量级 Web 服务器是用 C
编写的,但是实践证明,有些其他实现语言也可以成功地用于实现服务器,对此我已经做了实验,这些语言包括
Erlang、Java、Lisp、Lua、Perl、Python 和 Tcl。如果其中有您喜欢的语言,那么也许可以找到适合您的 Web 服务器。
由于很多特定的原因,您可能会将目光投向某种 “不常见” 的语言:
可以作为这些主题的例子。它是用 Python 编写的 Web 服务器。它支持 HTTP 多部分(上传)、会话、 cookie 等。从 0.2.1 版开始,Athana 一直被编写在一个单独的、精心组织的源文件中。
如前所述,不同的轻量级 Web 服务器有着不同的优点,它们或多或少独立于编程语言。所有轻量级 Web 服务器都比 Apache 更小、更易于配置。与 Apache 相比,有些轻量级 Web 服务器更快,有些则快得多。有些则强调安全性、重负载下的从容性、可扩展性或者内存占有量。在任何情况下,都可以以一种不适用于 Apache 的方式彻底地理解这些服务器。
哪些特定的产品使这些可能性成为现实?即使只留意 “轻量级” 服务器,面对的也是一个很大的难于管理的产品集合。不过可以将它们按子类来划分:超轻型、关注安全型、支持特定语言型等等。
我特别喜欢其中的超轻型 Web 服务器,它们比 Apache 小得多。如此小的应用程序可以直接记住,系统地、严密地加以考虑,以证明 它们的安全性或可伸缩性。小型 Web 服务器包括:
体积小并不妨碍这些服务器被正式使用。例如,fnord 可以处理数千个同时进行的连接。
也许轻量级作为一个类别最令人印象深刻的成就是高性能服务器:
有些 Web 服务器被实现为类或库,以便嵌入 到较大的应用程序中。 在这些 Web 服务器当中,我发现特别有趣的有:
Python 是几种适合不寻常环境的 Web 服务器的实现语言,这些 Web 服务器包括:
还有其他一些用 Perl 和其他不出名的语言编写的轻量级 Web 服务器:
有时候您可能需要其他一些用 C 编写的、具有不常见的次要优势的轻量级 Web 服务器:
获得产品和技术
讨论
关于作者
Cameron Laird 长期为 developerWorks 撰稿,并且曾担任专栏作家。他经常撰写关于能加快其雇主的应用程序开发的开放源代码项目的文章,着重关注可靠性和安全性。