spice client 和 spice server 通信机制(11)
时间:2025-07-08
时间:2025-07-08
SPICE_CHANNEL_DISPLAYred_dispatcher_set_peer
SPICE_CHANNEL_CURSORred_dispatcher_set_cursor_peer
SPICE_CHANNEL_INPUTSinputs_link
SPICE_CHANNEL_PLAYBACKsnd_set_playback_peer
SPICE_CHANNEL_RECORDsnd_set_record_peer
link最主要的工作之一就是网络连接的处理,即选择网络事件处理模型,设置网络事件响应函数等。spice用了两种模型:select、epoll
1)DisplayChannel的link实现:
Display的实现中引入了一个dispatcher,实现了各种对外的接口,接口本身大都不做实际工作,主要负责消息转发。
QXL_INTERFACE的初始化函数red_dispatcher_init会启动一个专门的工作线程
red_worker_main,此线程有三个职责,其中之一就是接收dispatcher接口转发过来的消息,并进行实际的消息处理工作。dispatcher和工作线程之间的通信是通过一个socketpair,利用epoll模型机型通信。
此处link函数的实现同样也是通过dispatcher接口red_dispatcher_set_peer将
RED_WORKER_MESSAGE_DISPLAY_CONNECT消息发送给red_worker_main,
red_worker_main中,epoll_wait等待事件,然后调用具体事件处理函数来处理,此处会调用handle_dev_input函数。handle_dev_input函数响应
上一篇:京津SCAD系统简介