chromium进程间通信-ChannelProxy

来源:互联网 发布:淘宝买家掉包怎么办 编辑:程序博客网 时间:2024/04/28 18:27

这篇文章主要介绍的是chromium进程间通信使用到的ChannelProxy类。为了从更宏观的角度来理解这个类,先来看一下它的类图。


它包含一个重要的属性就是Context,Context包含有以下的成员:

1、channel_,它封装了进程间通信用到的管道,是Channel类的一个实例,而在Channel类中,底层的通信都是由ChannelImpl实现的,Channel通过调用ChannelImpl来实现相关的管道操作。ChannelImpl的实现在上一篇文章中有详细的讲解。Channel继承的是Sender,它主要负责消息的发送操作。
2、listener_,当ChannelImpl收到消息后,它会调用listener_的OnMessageReceived方法,而这个listener_就是context。因为Context继承的是Listener,所以Context也有OnMessageReceive方法,这个listener_指针是Context在建立管道过程中,一直住下传递的。对于Context接收到的消息,它可能会把消息先过一次过滤器filters,然后dispatch调用自己的listener_的OnMessageReceived运行,Content中的listener_来源于构建它的实例。举例来说,对于RenderProcessHostImpl中实例化的ChannelProxy,它会把listerner_设为RenderProcessHostImpl的本身,也就是Context在调用OnMessageReceived会最终把任务交给RenderProcessHostImpl的OnMessageReceived运行。
3、listener_task_runner_,任务线程,在接收到消息后的消息处理都该线程完成。
4、ipc_task_runner_,IO线程,ChannelProxy在调用Context的相应方法时,都是通过ipc_task_runner_调用的,这表明Context的方法是在IO线程中执行的。在Context接收到消息后,它又会把消息dispatch到listener_task_runner_中执行,使IO和消息处理的过程不会相互影响,这样就实现了IO和消息处理分离。
5、filters_,消息使用的过滤器,首先由message_filter_router_决定一个消息会被哪些过滤器处理,然后再把消息交给相应的过滤器进行处理。一条消息被过滤器选中处理完成后,就不会交给listener处理了。


总结起来,ChannelProxy的作用就是IO分离与消息处理分离。好吧,我的水平有限,就只能先这么总结着了。

0 0
原创粉丝点击