communication between client and server
X client与Server之间的通信通道是全双工的。此信道规范的实现是基于TCP/IP socket 接口的,但是也可以其它方式实现此信道,例如 Unix domain sockets, 命名管道和共享内存。此信道必须保证可信、有序的字节流。因为X 协议不提供机制来发送进行重新排序和重新发送的通信数据包。例如当使用TCP/IP连接时,我们使用TCP 而不是UDP。
X 信道上发送的消息内容由X11 协议定义。此协议最开始是在1987年制定的,在过去的20多年间进行了大量的扩展。现在的核心协议与仍然兼容最初的版本。协议网址如下 http://www.x.org/releases/current/doc/ .
当X client 头一次连接server时,会以握手的形式来建立连接,以此来验证身份、设置通信数据大小端等通信参数。之后,client发送request 消息给server,让server执行某些具体操作或提供某些信息。通常,Clients为了高效的通信和上下文转换,它们会将request 消息积累在一个buffer中,然后打包发送这个包。此buffer通常由Xlib或者XCB替client进行管理。但client 应用程序经常需要对buffer中的 request进行flush操作,以此来保证request请求被处理的实时性。X server 处理单个client 发送的request时是按照request发送的先后顺序来的,然而,Server 对多个client 发送的request是并行处理的,因此并不能保证client 间request处理的顺序,除非使用特殊的request.server 和cilent都会记录在连接上发送的request的数量,并在后续使用此数字作为request的序列号。许多client的request都会被X server 简单处理,如果处理正常,并不会给client任何返回值。如果该request的定义要求有返回信息,那么server 就会发送回复,这个回复在client端叫做reply。reply的序列号表明此reply是对哪个request的回复。如果对requst的执行出错,server会发送 错误回复到client. 错误回复消息中包含出错包的序列号,错误码和一些关于错误的细节信息。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
暂无评论...