• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2024-04-30 15:40 Aet 隐藏边栏 |   抢沙发  54 
文章评分 1 次,平均分 5.0

CefPostTask

概述

  1. 用于在特定线程上调度任务的方法
  2. 它允许你将任务(通常是函数或回调)推送到 CEF 的某个内部线程进行异步执行
    1. 这样,你可以避免在不合适的线程上执行操作,从而确保线程安全并优化性能

线程类型

  1. TID_UI
    1. UI 线程,处理用户界面相关的任务
  2. TID_IO
    1. IO 线程,处理网络和文件IO操作
  3. TID_RENDERER
    1. 渲染线程,处理页面渲染任务(通常在渲染进程中使用)

示例

CefTaskRunner

  1. 用于管理任务的调度和执行
  2. 它提供了一种在特定线程上调度任务的方法,类似于 CefPostTask,但 CefTaskRunner 提供了更多的功能和灵活性

任务队列

  1. 每个线程(如 UI 线程、IO 线程)都有一个自己的任务队列,这些队列由 CEF 的任务调度机制管理

处理异步任务

  1. 可以将回调函数作为任务的一部分传递,任务执行完毕后调用回调函数处理结果

  1. 可以使用共享状态对象(如 std::promisestd::future)在不同线程之间传递任务结果

进程间通信

概述

  1. 用于在浏览器进程和渲染进程之间交换数据和指令

通信方法

  1. 消息传递
    1. CEF 提供了消息传递机制,允许进程之间发送和接收自定义消息
    2. 这种方式通常用于在浏览器进程和渲染进程之间交换数据或通知
  2. v8 javascript绑定
    1. CEF 允许你将 C++ 对象绑定到 JavaScript 环境中,从而使渲染进程能够调用 C++ 方法
    2. 这种方式可以用于实现复杂的通信逻辑
  3. 共享数据结构
    1. 可以使用共享内存或其他共享数据结构在进程之间共享数据
    2. 这种方法通常更复杂,需要小心管理同步和数据一致性

消息传递机制

  1. browserrenderer 进程中定义要传递的消息
  2. 使用 CefProcessMessage 在一个进程中创建消息,并使用 CefBrowser::SendProcessMessage 发送到另一个进程
  3. 在接收端实现 CefMessageRouterBrowserSide::HandlerCefMessageRouterRendererSide::Handler,并在 OnProcessMessageReceived 中处理接收到的消息

v8 javascript绑定

  1. 在渲染进程中绑定C++对象

  1. javascript里面调用C++方法

  1. 基于 CEF 的应用程序还可以提供自己的异步 JavaScript 绑定的自定义实现:
    1. 文档

进程启动消息

  1. 启动数据可以在创建时通过CefRefPtr<CefDictionaryValue> extra_info CefBrowserHost::CreateBrowser 的参数与特定的 CefBrowser 实例关联
  2. extra_info 数据将通过 CefRenderProcessHandler::OnBrowserCreated 回调传递到与该 CefBrowser 关联的每个渲染器进程
  3. 有关何时以及如何生成新渲染器进程的更多信息,请参阅“进程”部分

网络层

概述

  1. 默认情况下,CEF3中的网络请求将以与主机应用程序透明的方式处理
  2. 对于希望与网络层建立更紧密关系的应用程序,CEF3暴露了一系列与网络相关的功能

URLRequest

  1. 通过 CefURLRequest 类,可以在应用程序中创建和管理网络请求
  2. 开发者可以使用这个接口手动发起网络请求,并监听请求的状态和响应数据

请求拦截

  1. CEF 允许开发者在浏览器进程和渲染进程中拦截和修改网络请求
  2. 可以通过实现 CefRequestHandler 接口,在请求发起前或者响应返回后对请求进行处理

Cookie 和缓存管理

  1. CEF 提供了管理 Cookie 和缓存的功能,可以通过相应的接口控制 Cookie 的设置和删除,以及管理缓存的行为

代理设置

  1. CEF 允许开发者配置代理服务器,以便在网络请求中使用代理
  2. 可以通过 CefRequestContextCefRequestContextHandler 设置全局或者特定请求的代理

跨域请求

  1. CEF 支持跨域请求,并且提供了相应的安全机制来控制跨域请求的行为
  2. 跨域请求(Cross-Origin Request)是指在 Web 开发中,一个网页的脚本向另一个域名(或者协议、端口)发起 HTTP 请求
    1. 如果请求的目标与当前页面的域不同,就称为跨域请求
    2. 跨域请求是由浏览器的同源策略(Same-Origin Policy)所限制的
    3. 同源策略是一个安全机制,它限制了一个网页中的 JavaScript 脚本如何与来自不同源的资源进行交互
    4. 同源策略要求网页脚本只能访问与其来源相同的资源,即同协议、同域名、同端口的资源
  3. 解决跨域请求的方法:
    1. 跨域资源共享(CORS
      CORS 是一种机制,允许服务器在响应中附加一个头部信息,指示浏览器该如何处理跨域请求
      通过在服务器端设置合适的 CORS 头部,可以允许指定域的请求跨越同源策略限制
    2. JSONP(JSON with Padding)
      JSONP 是一种利用 <script> 标签进行跨域请求的方法。通过动态创建 <script> 标签,并设置其 src 属性为包含 JSON 数据的 URL,从而实现跨域请求
      JSONP 仅支持 GET 请求,并且需要服务器端支持 JSONP 回调
    3. 代理服务器
      可以在服务器端设置一个代理服务器,允许客户端通过代理服务器发起跨域请求,然后由代理服务器将请求转发到目标服务器,并将响应返回给客户端
    4. 服务器端设置跨域资源访问
      如果你有权限管理服务器端,可以在服务器端设置相应的配置,以允许指定的来源进行跨域请求
    5. WebSocket 协议
      使用 WebSocket 协议进行通信可以避免同源策略的限制,WebSocket 不受同源策略的限制,可以在不同源之间进行通信
    6. 浏览器插件或扩展
      有些浏览器插件或扩展可以用来绕过跨域请求限制,但这种方法可能会存在安全风险,并且不适用于所有情况

SSL/TLS支持

  1. CEF 内置了 SSL/TLS 支持,能够安全地进行 HTTPS 请求,并支持证书验证和安全连接

部分示例

  1. 简单的加载方式

  1. 自定义请求标头或上传更多复杂请求

  1. 还可以通过Cefurlrequest类发送网络请求
    1. 实现cefurlrequestclient接口以处理结果响应

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2024-06-09
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享