1、spice server
Spice server通过通道(channel)与client通信,每个通道类型专用于特定类型的数据。每个通道使用一个特定的tcp socket(可以是ssl或非安全的)。
主通道和输入通道受handler函数(在reds.c中实现)控制,显示和光标通道在red worker线程(每个display一个线程)里面处理,音频回放和录音通道有自己的handler(snd_worker.c)。libspice和VDI主机程序(比如qemu)通过为每个功能(qxl,agent,keyboard,mouse等)定义的接口来通信。
Red Worker(red_worker.c)
spice server为每个qxl设备实例运行一个red worker线程。red
worker的作用主要有:
* 处理qxl设备命令;
* 处理从dispatcher收到的消息;
* channel pipe和pipe item;
* 显示和光标通道;
* 图形压缩(使用quic,lz,glz);
* 视频流---识别、编码、创建流;
* 缓存---client共享的pixman缓存、光标、调色板缓存
* Cairo和OpenGL渲染----canvas,surface等
Red Dispatcher(red_dispatcher.c)
* 每个qxl实例一个dispatcher
* 初始化red worker,创建red worker线程
* 使用socketpair通道调度worker
* qxl设备使用QxlWorker接口,dispatcher实现并attach这些接口,将设备调用翻译成在worker管道中传递的消息。
References:
1. http://spice-space.org/docs/spice_for_newbies.pdf
Spice server通过通道(channel)与client通信,每个通道类型专用于特定类型的数据。每个通道使用一个特定的tcp socket(可以是ssl或非安全的)。
主通道和输入通道受handler函数(在reds.c中实现)控制,显示和光标通道在red worker线程(每个display一个线程)里面处理,音频回放和录音通道有自己的handler(snd_worker.c)。libspice和VDI主机程序(比如qemu)通过为每个功能(qxl,agent,keyboard,mouse等)定义的接口来通信。
2、图形子系统
Red Worker(red_worker.c)
spice server为每个qxl设备实例运行一个red worker线程。red
worker的作用主要有:
* 处理qxl设备命令;
* 处理从dispatcher收到的消息;
* channel pipe和pipe item;
* 显示和光标通道;
* 图形压缩(使用quic,lz,glz);
* 视频流---识别、编码、创建流;
* 缓存---client共享的pixman缓存、光标、调色板缓存
* Cairo和OpenGL渲染----canvas,surface等
Red Dispatcher(red_dispatcher.c)
* 每个qxl实例一个dispatcher
* 初始化red worker,创建red worker线程
* 使用socketpair通道调度worker
* qxl设备使用QxlWorker接口,dispatcher实现并attach这些接口,将设备调用翻译成在worker管道中传递的消息。
References:
1. http://spice-space.org/docs/spice_for_newbies.pdf