Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191423
  • 博文数量: 111
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 1240
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-07 07:46
文章分类

全部博文(111)

文章存档

2015年(2)

2014年(1)

2011年(1)

2010年(7)

2009年(100)

我的朋友

分类: LINUX

2009-08-07 10:11:21


转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静

3.客户/服务器架构

C/S架构是X Window最基本的架构,X Window的主体包括作为服务器运行的X Server,和中间的传输协议X Protocol,和客户封装X Protocol的函数库Xlib。应用程序通过Xlib把参数打包成X Protocol的格式,通过socket把请求发送给X Server,X Server执行请求之后再把返回值从原路返回给应用程序。

与传统的C/S架构不同的是,X Server并不是单纯的接受请求然后响应请求,它还可以主动主报事件,这通常是输入设备产生的事件。当然为了避免不必要的事件传输的开销,客户端可以决定接受哪些事件,过滤掉哪些事件。

X Window作为C/S 架构来设计,其理由是很充分的:

串行化共享资源。窗口资源是整个系统共享的,多个应用程序都要操作这些共享资源。为了有效的管理这些资源,至少要满足三点要求才行,其一是这些资源 要在全局共享的,其二是要求对这些资源串行化访问,其三是要求输入设备等事件要能主动上报给应用程序,这些要求都正是C/S模型所擅长的。

远程显示。客户端在一台机器上运行,而服务器在另一个台机器上运行,这在VNC和RemoteDesktop之类的技术出现之前,这种特性为远程管 理提供了非常方便的手段。客户端在远程机器上运行,而服务器XServer在本地远行,这就可以让远程的程序显示到本地机上。当然,这与传统的客户/服务 器的物理位置正好反过来了。

语言与无关性。这又是C/S模型的另外一个好处,Unix下的编程语言可谓百花其放,X Window不可能为某单一语言而设计。而对于C/S模型,只要服务器端和客户端共享同样的X Protocol,两者完全可以用不同的语言开发。

从理论上说,客户端是可以不依赖于任何其它库,直接打包所有请求参数,解包所有的响应数据,就可以开发出基于X Window的应用程序。然而,这些打包解包操作比较繁琐,容易出错,也没有必要每个人都这样去做,Xlib封装了所有这些操作,简化了X程序的开发工 作。由于大多数的toolkit都是C/C++写的,所以Xlib采用了C语言开发。

毫无疑问,基于Xlib可以写出在X Window上运行的GUI程序。在前面提到的X Window提供的服务中,我们可以看出,X Window提供的是非常底层的服务,就窗口而言,X Window根本不知道按钮、菜单、单选框、复选框、列表框、甚至不知道窗口管理器的存在,它唯一知道的就是窗口,这些都是非常低级的操作。

为了简化X应用程序的开发,不同组织开发了众多的 X toolkit,在这些toolkit中,都实现了一些常用的组件,以及一些公共函数。X Window的发布包带了好几种toolkit。X Window的规范中并没有规定GUI程序看起来是什么样子的,结果不同的组织开发出来的X toolkit百花齐放,形成不同的视感(look and feel),

现在可以用一种toolkit表现不同的视感了,用来模拟其它toolkit,让来自不同阵营的用户都感到舒服。这造就了大多数toolkit都能做到,让描述风格的配置文件独立于应用程序,这是一个非常有意义的进步。

GTK+和QT是目前最流行的X tool kit,GTK+用C开发的,QT是用C++开发的,从功能、风格和易用性来看,两者各有千秋,难分伯仲。

窗口管理程序的功能比较特殊,其实它不过是一个普通X Window的客户端应用程序,后面我们会对它作比较详细的介绍。

Category: X Windows
阅读(506) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~