上面是一个浏览器的架构图,JS引擎+渲染引擎+外壳Shell+内核 4部分构成了浏览器的主体,传统的插件(上图左部)通过NPAPI与浏览器通信,Native Client(上图右部)通过PPAPI与浏览器通信,只有浏览器内核可以直接访问本地系统OS。

【Native Client】

Native Client是Chrome浏览器里面的一个沙箱,它允许在沙箱里面运行本地码程序,使得程序执行速度接近系统的本地程序。同时它又制定了很多沙箱策略来限制本地程序安全的执行。

【可信程序和不可信程序】

在Chrome浏览器里面共有两种类型的程序存在,可信程序(上图黑色边框部分)和不可信程序(上图蓝色边框部分)。可信程序认为是安全的,能够访问一切的本地资源;不可信程序由于存在安全隐患,将其放入沙箱之中,不能直接访问本地资源。而传统的NPAPI插件是被作为可信程序,所以其存在安全隐患。

【基于Native Client的编程框架】

通常在Native Client中运行的本地程序只是利用了CPU+内存的执行优势,它只有一个newlib或者glibc库可以调用,而我们在Native Client搭建了一个编程框架,提供更多的支持(信号量、多线程等)给本地程序,使得本地程序计算能力增强。

编程框架本身是作为可信程序的,能够访问一切本地资源。因此在这个新的模型中,本地程序可以跑自己的逻辑,同时需要访问本地资源时,通过PPAPI接口调用就可以了。

基于Native Client的编程框架相关推荐

  1. ARChon 分析之三:Native Client

    从前两篇文章过来,假设你已经了解了下载使用ARChon.简单分析与Chrome插件介绍 这篇文章主要是分析ARChon如何实现跨平台. 源码:https://bitbucket.org/vladiko ...

  2. 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明

    基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...

  3. 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程

    基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...

  4. 学习C++项目——一个基于C++11简单易用的轻量级网络编程框架 1

    一个基于C++11简单易用的轻量级网络编程框架 一.项目下载.导入.编译和运行   现在准备深入学习 C++ ,先肝一个项目,这个项目是<一个基于C++11简单易用的轻量级网络编程框架>, ...

  5. 【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件学习

    一.介绍UniRx插件 UniRx是一种基于Unity3D的响应式编程框架. UniRx就是Unity版本的Rx响应式扩展,响应式就是观察者和定时器,扩展指的是LINQ的操作符.Rx响应式扩展的特点就 ...

  6. 【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件教程

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  7. 如何通过编程方式添加Native Client服务器别名

    之前我有一篇博客讲到了Native Client中添加服务器别名的问题.请参考下面的链接(讨论服务器别名的内容在该链接文章的底部) http://www.cnblogs.com/chenxizhang ...

  8. Chrome Native Client 原理

    Native Client:A Sandbox for Portable, Untrusted x86 Native Code 系统架构 一个NaCl应用程序由许多可信和不可信NaCl模块组成,每个模 ...

  9. 响应式编程框架ReactiveCocoa介绍与入门

    ReactiveCocoa是Github团队开发的第三方函数式响应式编程框架,在目前市面上的很多iOS App都大量使用了这个框架.以下我简称这个框架为RAC.我下面会通过几篇博客来和大家一起学习这个 ...

最新文章

  1. linux之让终端支持C++11/14编译cpp文件
  2. leetcode551. 学生出勤记录 I
  3. P3193 [HNOI2008]GT考试
  4. JavaScript | 用户定义函数的一些示例
  5. php返回200,关于API 使用 HTTP 状态码还是全部返回 200
  6. H3C-WA2210升级
  7. 【codevs1026】逃跑的拉尔夫,广搜的胜利
  8. 微课|Python程序设计开发宝典(5.2.2):默认值参数
  9. 初学Kotlin——在自定义View里的应用
  10. HTML5学习笔记(六):CSS基本样式
  11. k8s之PodIP、ClusterIP和ExternalIP
  12. Qt5学习笔记之QQ登录界面三:添加图片资源
  13. ElasticSearch查询模板
  14. 大规模集成电路数字计算机
  15. 两个PDF比较标出差异_怎样核对两份word文档内容差异?我用2小时,同事仅用2分钟搞定...
  16. python周环比增长率怎么算_Pandas实现计算同比、环比
  17. 产品设计(1):开源产品设计工具pencil
  18. 《周一清晨的领导课》笔记-NO.1
  19. 小米路由器sn算ssh密码_路由宝刷小米mini编程器固件,开SSH.
  20. 美国不道德的人体实验

热门文章

  1. FineUI 页面跳转
  2. BZOJ-1024 生日快乐 DFS+一丝sb的数学思考
  3. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能...
  4. 怎样用jquery添加HTML代码
  5. asp控件Repeater运用
  6. linux 查看各目录(文件夹)下文件大小
  7. FLASH开发[02]
  8. 10月13日云栖精选夜读:【云栖大会】阿里云和红帽达成合作为百万级客户提供更多企业级解决方案...
  9. Ubuntu 16设置固定IP和DNS
  10. 【Samba】安装与配置