cef支持各种语言和多种操作系统。在设计的时候充分考虑了性能和易用性。cef核心功能提供了c和c++的接口。cef提供了和主程序之间的通信能力(利用 custom plugins, protocols,javascrpit object 和 javascript extensions)。主应用程序可以选择性的使用控制 资源的加载,切换, context menus, printing等。

依赖

  1. chromium
  2. webkit
  3. v8
  4. skia
  5. angle

线程注意事项

CEF线程有如下几种

typedef enum {
TID_UI,
TID_DB,
TID_FILE,
TID_FILE_USER_BLOCKING,
TID_PROCESS_LAUNCHER,
TID_CACHE,
TID_IO,
TID_RENDERER,
} cef_thread_id_t;

在使用线程的时候需要注意如下几点:

  1. 千万不要阻塞UI线程
  2. UI线程会任务是主线程,当 CefSettings.multi_threaded_message_loop = false的时候。
  3. 所有的webkit和V8的交互必须用 TID_RENDERER线程
  4. CefPostTask 方法可以再不同线程中进行异步调用

接口

  1. CefApp,此接口用来传递到CefInitialize(),和允许应用程序定制全局,如资源加载,代理。这些功能是由所有进程共享的,有些必须实现浏览器的过程中,必须在渲染过程中执行。见详情头文件的注释。
  2. CefClient,此接口用来传递到CefCreateBrowser() or CefCreateBrowserSync(),和充当单独CEF Browser事例和客户端应用程序的连接,也负责请求和显示处理的接口。请求处理,显示处理等额外的接口,通过这个接口暴露。
  3. CefBrowser,公开由浏览器提供的功能。包括前进后退导航,来源检索,加载请求等,一个CefBrowser可能有一到多个子类的CefFrame对象。在一个特定的过程或一个特定的线程必须调用一些方法,所以仔细阅读文档。
  4. CefBrowserHost - 公开有关运行browser进程中唯一可用的browser窗口的功能。例如,检索本地父窗口句柄,或销毁browser窗口。

    CefRenderProcessHandler - 公开WebKit和V8对渲染进程中应用程序的集成能力。通过CefApp返回此对象的一个​​实例。

进程注意事项

CEF3使用了很多不同的进程:

  1. Broser process- 这个进程可以认为是应该程序的主进程,当调用CefInitialize()的时候建立
  2. Render process- web容器(webkit和v8)在此进程中执行
  3. plugin process- 插件(如 Flash)
  4. GPU process-GPU渲染进程
  5. Utility process- 各种其他任务在这个进程中跑。

所有关于chrome 进程的资料可以在这里这里找到。

CefBrowser 和 CefFrame 在browser和render进程中都存在,并且传递一系列callbacks。 CefProcessMessage能够在browser进中利用CefBrowser::SendProcessMessage 函数发出, 并且在CefClient::OnProcessMessageRecieved 和CefRenderProcessHandler::OnProcessMessageRecieved 接收。

重要的细节

CEF3 有如下几个比较重要的类:

  • CefMainDelegate - 用于普通进程的逻辑过程
  • CefContentClient- 在普通进程 展现Content Api的回调。
  • CefContext-在browser进程中,展现全局的CEF上下文。 一个单独的CefContext对象时由CefInitialize()建立,有CefShutdown销毁。
  • CefBrowserMainParts- browser 进程的逻辑
  • CefContentBrowserClient-在browser 进程展现Content Api的回调。
  • CefBrowserHostImpl-是CefBrowserHost 的实现
  • CefContentRendererClient- 在render 进程中展现Content Api的回调
  • CefBrowserImpl- CefBrowser的实现者

Cef 架构的更多相关文章

  1. 使用CEF(三)— 从CEF官方Demo源码入手解析CEF架构与CefApp、CefClient对象

    在上文<使用CEF(2)- 基于VS2019编写一个简单CEF样例>中,我们介绍了如何编写一个CEF的样例,在文章中提供了一些代码清单,在这些代码清单中提到了一些CEF的定义的类,例如Ce ...

  2. CEF 框架使用集锦

    CEF 框架使用集锦: 参考:〓https://github.com/NetDimension/NanUI/wiki/%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8NanUI ...

  3. 使用CEF(一)— 起步

    使用CEF(一)- 起步 介绍 Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件,支持Windows, Li ...

  4. NanUI文档 - 开始使用NanUI

    NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript相互掉用(待更新...) 如何处理Nan ...

  5. NanUI文档 - 打包并使用内嵌式的HTML/CSS/JS资源

    NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript相互掉用(待更新...) 如何处理Nan ...

  6. OpenVSwitch 硬件加速浅谈

    https://zhuanlan.zhihu.com/p/57870521 本文首发SDNLAB. 现代的虚拟化技术使得开发和部署高级网络服务变得更加简单方便.基于虚拟化的网络服务,具有多样性,低成本 ...

  7. Duilib嵌入CEF以及JavaScript与C++交互

    转载:http://blog.csdn.net/foruok/article/details/50573612 转载:http://blog.csdn.net/foruok/article/detai ...

  8. CEF源码编译和生产库的使用

    CEF版本是Branch 2171 开发环境是VS2012 查看一下libcef_dll_wrapper工程属性,确定Code Generation 选择MTD(Debug) 或者MT(Release ...

  9. 初识CEF

    介绍 CEF全称Chromium Embedded Framework,是一个基于Google Chromium 的开源项目.Google Chromium项目主要是为Google Chrome应用开 ...

随机推荐

  1. mallmold开源商城系统网银在线chinabank支付插件

    最近没事捣鼓项目,找了个轻型商城系统mallmold,用起来还觉的挺不错的,尤其是mallmold中文版,赞一个.中文版集成了大部分主流支付系统,但因是个人网站,没法获得对应的服务,最终选择了网银在线 ...

  2. 移动端/H5关于cursor:pointer导致的问题

    cursor属性规定要显示的光标的类型(形状),该属性定义了鼠标指针放在一个元素边界范围内时所用的光标形状(不过 CSS2.1 没有定义由哪个边界确定这个范围). 不过,这个属性用在PC端没有任何问题 ...

  3. WPF中UserControl和DataTemplate

    最新更新: http://denghejun.github.io 前言 前言总是留给我说一些无关主题的言论,WPF作为全新Microsoft桌面或web应用程序显示技术框架, 从08年开始,一直到现在 ...

  4. ASM 磁盘头信息备份

    ASM磁盘头信息保存在每个磁盘的前4K里面,这个信息的备份对于ASM的恢复非常重要,有下面的几种方 1.直接做dd来备份磁盘的前4K,磁盘头信息丢失时,dd回来 备份:dd if=/dev/raw/r ...

  5. git常使用命令整理

    1.git撤销本地所有修改(tracked和untracked) . git clean -df . git reset --hard 第一个命令只删除所有untracked的文件,如果文件已经被tr ...

  6. java工程师 学习路线图

  7. DataBinding examples

    Databinding in Windows Forms demo (CSWinFormDataBinding) /************************************* Modu ...

  8. Highcharts 总结

    一.Highcharts  series属性 1.下面是一个基本曲线图的例子: <html> <head> <meta charset="UTF-8" ...

  9. composer install 卡壳

    曾经用npm依赖包的时候也遇到了相应的问题,总而言之在国内,各种依赖包就换成国内的镜像吧你懂得! linux 或 window 命令行输入 composer config -g repo.packag ...

  10. PowerDesigner中表名过长,自动生成的主键名截取的问题

    在PowerDesinger中,若表名过长,自动生成的主键名会被自动截取. 解决如下:DataBase/Edit Current DBMS/Scripts/Objects/PKey/ConstName ...