📄 00000003.htm
字号:
<BR> 因为client和server完全独立,一种名之为X-terminal 的新型态显示器 <BR>被发展出来。简单的说,X-terminal 是一种除了能直接在上面执行X server <BR>程式外,什麽也没有的工作站,它有键盘,滑鼠和萤幕,以及一些和网路互相 <BR>通讯的方法(所以在其它主机上的client可在它上面显示),但并没有档案系 <BR>统,也不提供一般目的 (general purpose)的程式,一般目的的程式需要在网 <BR>路上执行。 <BR> <BR> <BR>2.2 Server 和 Client 如何交谈 <BR> <BR> 本节描述client和server互相通讯时,双方各传输些什麽。基本上,一个 <BR>client要求server去执行输出,输入则藉著 "事件" (event) 的通知由server <BR>来掌握( "事件" :如按下键盘的键或滑鼠的按钮等等)。 <BR> <BR> <BR> 2.2.1 Client送达server的东西;Output Handing (输出交予) <BR> <BR> 当一个client要求server做一个动作,例如在一个指定的萤幕上建立一个特 <BR>殊特徵的视窗,或者在一个视窗中写一列文字串。这时client是藉著送 "需求" <BR>(requests)到server上来达成。一个 "需求" 是一个被封装(package) 的简单 <BR>区块(block) ,区块包含一个 "操作码"(opcode) 来指示要执行何种操作,伴 <BR>随著一些引数(arguments) 提供更多的需求细节。例如:清除一个视窗内的一 <BR>个长方形区域,client会送一个16位元组(byte)的需求区块,来指定是哪一个 <BR>视窗,欲清除区域的左上角座标及区域的高和宽。 <BR> <BR> 这个格式有几个重要的特徵: <BR> <BR> . 需求区块的内容,和client与server在何种型态上的机器上执行完全无 <BR>关。一个client可以输出需求给在任何型式显示器上的任何X视窗server。需 <BR>求和语言、机器及作业系统均无关。 <BR> <BR> . 每一个需求包含了视窗的细节和其它被使用的资源,对一个client送至 <BR>特定server的需求超过一种以上的连接方法,所以在网路架构上提供的视窗数 <BR>目没有限制。 <BR> <BR> . 需求区块通常大小为20位元组左右,算是相当的小,因为需求是设定为 <BR>相当高阶的,(例如画一条线是指定两个端点而非记录一串萤幕上的点)通常 <BR>萤幕上被影响到的像素的数目往往是区块本身大小的十到一百倍,如此不会使 <BR>网路的负荷太重,网路的使用效率会非常的好(一般认为X的server和client <BR>之间的传输是位元影像 (bitmaps)的观念是错误的)。 <BR> <BR> <BR> 2.2.2 Server送达Client的东西;Input Handling (输入交予) <BR> <BR> Server也会利用通讯通道送资讯回client,这些资讯包括回应client需求 <BR>是否成功和告诉client有兴趣的特殊 "事件" ,这些 "事件" 包含的讯息类似 <BR>”视窗XYZ 的滑鼠左按钮被碰触”或”视窗ABC 已被重定大小等”。 <BR> <BR> 就像从client来的需求一般,server的回应也是一些和语言、机器、作业 <BR>系统无关的简单区块。 <BR> <BR> "事件" 是X的基本功能,所有的键盘输入,滑鼠按钮输入和滑鼠移动都 <BR>是由 "事件" 来控制,尤有进者,client完全依赖 "事件" 才能获得那些一定 <BR>在系统发生的而它必需知道的资讯。我们将从一些普通的输入和移动功能著手 <BR>,实际了解 "事件" 是如何工作的: <BR> <BR>键盘输入 <BR> <BR> 当你从键盘按下一个键,这个动作会被server查觉到,Server便送出一个 <BR><Key Press> 的 "事件" 通知那些登记对这种情况有兴趣的应用程式。这种通 <BR>知有一些限制:不是通知目前被滑鼠指标指到的视窗,便是通知目前被指定接 <BR>受所有键盘输入的视窗。这种限制称之为设定键盘焦点(focus) 。 <BR> <BR> 当键被松开时(通常几乎是立刻),另外一个<Key Release> 的 "事件" <BR>产生了,一般除了那些修饰键(例如SHIFT 或 CONTROL),很少的应用程式会 <BR>对松开键这个 "事件" 有兴趣。 <BR> <BR> 送到client的讯息区块告诉client它们是键盘 "事件" 内容的只是”编号 <BR>第几的键已被按下(或松开)”,不包含是不是ASCII 或EBCDIC字元及如何解 <BR>释等内容,而把这些留给client程式去处理,这种做法使得client程式看起来 <BR>似乎复杂,但是标准的xlib函数馆,有非常简单的副程式可供控制解释键盘 " <BR>事件",而且通常预设成你所希望的键盘型式,换个角度来看,这种”软体” <BR>的键盘字元相关方式允许了很大的弹性:在server这方面,对不同型式的键盘 <BR>均可以完全重新对应,在client这方面,每一个单独的键都”可程式化”,例 <BR>如按一个键即可以输入一串使用者特定的字串,或者完成一个特殊的功能等。 <BR> <BR> 稍後我们会再详细讨论,不过直到目前,这些将不会影响你使用系统,事 <BR>实上,对於X系统如何处理你按下一个”A ”键,并将它转换成一个ASCII 的 <BR>”A ”字元送到你的应用程式的这类事情,你不需要太关心。 <BR> <BR>关於指标位置的 "事件" <BR> <BR> client可以要求当萤幕上的指标进入或离开它所控制的视窗时被通知,这 <BR>种 "事件" ("<EnterWindow>" 和"<LeaveWindow>") 告诉client程式是进入或 <BR>离开视窗以及是哪一个视窗。 <BR> <BR> 当指标进入视窗时通常用类似”高亮度”视窗这一类的方式表式,有些应 <BR>用程式是改变视窗的边框(例如从灰到黑),有些则会改变颜色,用以强调你目 <BR>前正在处理这个应用程式(视窗)。 <BR> <BR>当一个视窗未被覆盖时 -- Exposure (曝光 "事件") <BR> <BR> X和大多数其它的视窗系统有一个很大的不同点,那就是client必需负责 <BR>保持它的视窗最近的内容,server只是维持视窗在任何时刻均在萤幕上显示, <BR>但它不负责保持视窗的内容。 <BR> <BR> 当原先被其它的视窗遮住的视窗(或视窗的一部份)变成可见时,server <BR>并不知道应该显示这个视窗的哪个部份。server送一个exposure(曝光)"事件" <BR>给拥有这个视窗的client,告诉它视窗的哪一个部份刚刚已变成可见,client便 <BR>会决定该怎麽作,在大多数的情况(一般为简单的应用程式或小视窗),client <BR>只是重画整个视窗,因为只画视窗未被遮盖的部份往往要多花额外计算,并不 <BR>值得,在更复杂的应用程式,client才会只重画视窗必需要出现的部份,这是 <BR>由应用程式的撰写者决定,他必需在效率(视窗更新的速度)和只重画部份视 <BR>窗程式码的复杂程度间作取舍。 <BR> <BR> 依赖client来重画视窗内容的方式对效率特别重视,尤其是下拉式选单, <BR>你总不希望选下选单之後,选单过了老半天才消失而让下面的视窗显示出来吧 <BR>,为了克服这点,有些X的产品包含了被称为save-under(存下层)的便利程 <BR>式: <BR> <BR>你可以告诉server如果可能的话,尽量在一个视窗被遮盖前将其被遮盖的内容 <BR>存下,当遮盖的视窗被移走时便可立即重现而不需要送曝光 "事件" 给client。 <BR> <BR> 一个类似而更常用,被称为backing store 的方式也被发展出来,你可以 <BR>告诉server尽可能在一个视窗被遮盖前将其全部内容存下,同样的,这种方式 <BR>可以改进client重画视窗的效率,backing store 和save-under两者的不同处 <BR>是前者储存整个视窗的内容,而後者只存被遮盖的部份。 <BR> <BR> 虽然有了save-under和back store这两种产品,但此种结构不被担保, <BR>client仍然随时保持准备接受曝光 "事件" ,即使server真的维护(maintain) <BR>了一段时间的视窗内容,也可能因为记忆体不足而被迫停止,转而开始重新送 <BR>出曝光 "事件"。 <BR> <BR>2.3 X的网路风貌 <BR> <BR> 我们曾经提过,client和server只需透过网路便可在不同的机器上执行, <BR>下面几节我们将看看如何利用这种便利、为什麽有用、和它如何因整合了计 <BR>算资源而增进了网路的成长。 <BR> <BR> <BR> 2.3.1 你如何实际使用X网路 <BR> <BR> 当server在一个连接了显示器的机器上执行,而client在另一部机器上执 <BR>行时,滑鼠和键盘的输入由server所在的机器搜集,可是client却可以在别的 <BR>地方使用到这些输入,这是如何办到的?我们以下面的例子解释。 <BR> <BR> 你在使用一个由Xserver控制显示器的工作站,如果它是独立的,很明显 <BR>地,client也在此工作站上执行,即使连接了网路,大部份的时候你还是在你 <BR>自己的工作站执行client,可是因为有一些特殊的便利程式,你的机器上并没 <BR>有,而你却希望在你的机器上显示程式的输出,这时你便需要网路上的机器了 <BR>。利用你的作业系统提供的一些普通的网路设备程式,你便可以让client程式 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -