spice架构

spice架构分析

简介

主要组成:spice架构包括spice-clientspice-serverspice协议和相应的QXL(图形处理)设备、QXL驱动等。

客户端:运行在终端设备上,向用户提供虚拟桌面环境,spice-clien作为远程访问的客户端程序,主要用来连接、控制、通信和显示。一般来说,通过解析命令行参数、运行主消息循环、处理事件等来实现。

服务端:运行在桌面虚拟化服务器上,通过spice协议客户端进行通信,管理不同用户的虚拟桌面环境。spice服务端基于KVM与QEMU虚拟化环境,每一个桌面环境使用一个独立的QEMU虚拟机进程,服务端使用VDI与虚拟设备进行直接交互,不需经过虚拟机中Guest os。

相关组件:为了更好的支持spice协议,QEMU虚拟机兼容于VGA的专用图形处理设备QXL,通过在Guest操作系统上安装相应的QXL驱动,提供更好的远程显示效果和增强图形能力。spice agent是一个可选模块,运行在Guest os上,执行面向Guest的处理任务如显示设置、copy和paste等。

spice架构如下:

在这里插入图片描述

在这里插入图片描述

客户端框架

在这里插入图片描述

客户端框架剖析

  • Application类是客户端的主要对象,包含Redclient、RedScreen、Monitor类的实例,对它们进行管理,并处理应用程序的一般功能,如命令行参数解析、主消息循环、事件的响应和处理、重定向鼠标操作、全屏处理等
  • RedWindow类是平台相关的实现,继承自RedDrawable和RedWindow_p,实现客户端窗口的功能,如显示、隐藏、移动、改变大小、标题等的状态设置和操作。RedDrawable与RedWindow_p是平台相关的,分别提供基础的像素渲染操作和平台相关的窗口数据和操作。
  • 客户端通过RedScreenScreenLayer提供虚拟桌面环境的显示。spice使用了层的概念,将各层的显示逻辑分开,在当前版本中,光标作为独立的一个层,位于其他显示层之上,单独处理光标的显示。ScreenLayer类封装了层的基本操作,如清除、更新、失效等操作。RedScreen封装屏幕的相关逻辑,使用ScreenLayer显示虚拟桌面内容,并通过RedWindow的接口对客户端窗口进行控制。
  • RedClient作为主渠道。它拥有所有其他实例化的通道并控制它们(使用它们的工厂创建通道、连接、断开连接等),并处理控制、配置和迁移(使用 Migrate 类)。

服务端框架

在这里插入图片描述

服务端是以libspice(动态链接库)的形式提供接口,一方面通过spice协议与客户端进行通信,另一方面,通过VDI接口与QEMU进行交互。

spice协议和虚拟多通道

spice协议定义一系列用于访问、控制、接收网络远程设备(如键盘和鼠标)输入以及发回输出结果的消息,同时还支持服务端从一个网络地址迁移到另外的地址上。

多通道

服务器和客户端通过channel来信息交互,每个channel是专用的一种特殊的数据类型,这个可用的channel是:

  • Main:主连接通道,用于迁移控制、鼠标模式控制、Guest配置、Agent通信等。
  • DisplayChannel:接收远程显示更新
  • InputsChannel :发送鼠标、键盘事件
  • CursorChannel :接收光标位置和形状
  • PlaybackChannel :接收音频流
  • RecordChannel :音频捕获和发送

spice协议被用于客户端和服务端之间的通信,具体的通信操作通过各种不同的channel实现,每一种channel用来专门负责一种类型的数据传输与通信。当网络繁忙或有QoS要求时,可根据实际情况,在运行时动态关闭或打开不同的channel,保证良好的用户体验。服务端通过接收客户端输入和控制消息,并向客户端发送显示内容,在客户端,每个channel使用专门的TCP连接,并用专门的线程进行处理,通过设置不同线程的优先级达到不同的Qos;服务端有与客户端对应的channel,处理由来自客户端和发给客户端的数据。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值