⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000003.htm

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -