Node.js:来一打 C++ 扩展

Node.js:来一打 C++ 扩展
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2018-06
版次: 1
ISBN: 9787121336423
定价: 109.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 480页
字数: 320千字
  •   Node.js 作为近几年新兴的一种编程运行时,托 V8 引擎的福,在作为后端服务时有比较高的运行效率,在很多场景下对于我们的日常开发足够用了。不过,它还为开发者开了一个使用C++ 开发 Node.js 原生扩展的口子,让开发者进行项目开发时有了更多的选择。  《Node.js:来一打 C++ 扩展》以 Chrome V8 的知识作为基础,配合 GYP 的一些内容,将教会大家如何使用 Node.js提供的一些 API 来编写其 C++ 的原生扩展。此外,在后续的进阶章节中,还会介绍原生抽象NAN 以及与异步相关的 libuv 知识,最后辅以几个实例来加深理解。不过,在学习本书内容之前,希望读者已经具备了初步的 Node.js 以及 C++ 基础。  阅读《Node.js:来一打 C++ 扩展》,相当于同时学习Chrome V8 开发、libuv 开发以及 Node.js 的原生 C++ 扩展开发知识,非常值得! 1 Node.js 的 C++ 扩展前驱知识储备  1 1.1 Node.js 的模块机制  2 1.1.1 CommonJS 的模块规范  2 1.1.2 Node.js 的模块  4 1.1.3 小结  9 1.1.4 参考资料  9 1.2 Node.js 的包机制  9 1.2.1 CommonJS 的包规范  9 1.2.2 Node.js / NPM 下的包  13 1.2.3 NPM 与 CNPM  16 1.2.4 小结  19 1.2.5 参考资料  19 1.3 Node.js 依赖简介  20 1.3.1 Chrome V8  20 1.3.2 libuv  25 1.3.3 其他依赖  28 1.3.4 小结  30 1.3.5 参考资料  30 1.4 C++ 扩展开发的准备工作  31 1.4.1 编辑器 / IDE  31 1.4.2 node-gyp  36 1.4.3 其他构建工具  54 1.4.4 小结  56 1.4.5 参考资料  56 2 C++ 模块原理简析  57 2.1 为什么要写 C++ 模块  57 2.1.1 C++ 比 JavaScript 解释器高效  57 2.1.2 已有的 C++ 轮子  72 2.1.3 小结  77 2.1.4 参考资料  77 2.2 什么是 C++ 扩展  78 2.2.1 C++ 模块本质  78 2.2.2 Node.js 模块加载原理  80 2.2.3 小结  102 2.2.4 参考资料  103 3 Chrome V8 基础  104 3.1 Node.js 与 Chrome V8  104 3.2 基本概念  105 3.2.1 内存机制  105 3.2.2 隔离实例(Isolate)  108 3.2.3 上下文(Context)  109 3.2.4 脚本(Script)  110 3.2.5 小结  110 3.2.6 参考资料  111 3.3 句柄(Handle)  111 3.3.1 本地句柄(Local)  112 3.3.2 持久句柄(Persistent)  115 3.3.3 永生句柄(Eternal)  119 3.3.4 待实本地句柄(Maybe Local)  119 3.3.5 小结  121 3.3.6 参考资料  121 3.4 句柄作用域  121 3.4.1 一般句柄作用域(Handle Scope)  122 3.4.2 可逃句柄作用域(Escapable Handle Scope)  125 3.4.3 小结  129 3.4.4 参考资料  129 3.5 上下文(Context)  129 3.6 模板(Template)  133 3.6.1 函数模板(Function Template)  133 3.6.2 对象模板(Object Template)  138 3.6.3 对象模板的访问器(Accessor)与拦截器(Interceptor)  144 3.6.4 对象模板的内置字段(Internal Field)  175 3.6.5 函数模板的继承(Inherit)  183 3.6.6 小结  188 3.6.7 参考资料  189 3.7 常用数据类型  189 3.7.1 基值(Value)  189 3.7.2 字符串(String)  194 3.7.3 数值类型  196 3.7.4 布尔类型(Boolean)  196 3.7.5 对象(Object)  196 3.7.6 函数(Function)  200 3.7.7 数组(Array)  202 3.7.8 JSON 解析器  203 3.7.9 函数回调信息(Function Callback Info)  203 3.7.10 函数返回值(Return Value)  204 3.7.11 隔离实例(Isolate)  204 3.7.12 小结  205 3.7.13 参考资料  206 3.8 异常机制  206 3.8.1 try-catch  206 3.8.2 抛出异常  209 3.8.3 异常生成类(Exception)  211 3.8.4 小结  211 3.8.5 参考资料  211 4 C++ 扩展实战初探  212 4.1 binding.gyp  212 4.1.1 惊鸿一瞥  213 4.1.2 binding.gyp 基础结构  213 4.1.3 GYP 文件  214 4.1.4 常用字段  221 4.1.5 小结  228 4.1.6 参考资料  228 4.2 牛刀小试  229 4.2.1 又是 Hello World  229 4.2.2 函数参数  232 4.2.3 回调函数  234 4.2.4 函数返回  238 4.2.5 小结  239 4.2.6 参考资料  240 4.3 循序渐进  240 4.3.1 C++ 与 JavaScript 类封装  240 4.3.2 实例化 C++ 类封装对象的函数  250 4.3.3 将 C++ 类封装对象传来传去  253 4.3.4 进程退出钩子  255 4.3.5 小结  259 4.3.6 参考资料  259 5 Node.js 原生抽象——NAN  260 5.1 Node.js 原生模块开发方式的变迁  260 5.1.1 以不变应万变  260 5.1.2 时代在召唤  261 5.1.3 小结  267 5.1.4 参考资料  267 5.2 基础开发  267 5.2.1 什么是 NAN  267 5.2.2 安装和配置  269 5.2.3 先睹为快——搭上NAN 的快车  270 5.2.4 基础帮助函数和宏  276 5.2.5 忽略 node_modules  279 5.2.6 小结  279 5.2.7 参考资料  280 5.3 JavaScript 函数  280 5.3.1 函数参数类型  280 5.3.2 函数声明  282 5.3.3 函数设置  288 5.3.4 小结  296 5.3.5 参考资料  296 5.4 常用帮助类与函数  296 5.4.1 句柄相关  296 5.4.2 创建数据对象  298 5.4.3 与数据对象“玩耍”  300 5.4.4 封装一个类  314 5.4.5 异常处理  315 5.4.6 小结  315 5.4.7 参考资料  316 5.5 NAN 中的异步机制  316 5.5.1 Nan::AsyncQueueWorker  316 5.5.2 Nan::Callback  317 5.5.3 Nan::AsyncWorker  317 5.5.4 Nan::AsyncProgressWorker  323 5.5.5 小结  327 5.5.6 参考资料  327 6 异步之旅——libuv  328 6.1 基础概念  329 6.1.1 事件循环  330 6.1.2 句柄(Handle)与请求(Request)  333 6.1.3 尝尝甜头  335 6.1.4 小结  340 6.1.5 参考资料  340 6.2 libuv 的跨线程编程基础  341 6.2.1 libuv 的线程  342 6.2.2 同步原语(Synchronization Primitive)  347 6.2.3 工作队列  355 6.2.4 小结  356 6.2.5 参考资料  357 6.3 跨线程通信  357 6.3.1 uv_async_t 句柄  357 6.3.2 Watchdog 半成品实战解析  358 6.3.3 Watchdog 试运行  367 6.3.4 小结  368 6.3.5 参考资料  369 7 实战——文件监视器  370 7.1 准备工作  370 7.1.1 功能规划  370 7.1.2 文件系统监听库——efsw  373 7.1.3 小结  376 7.1.4 参考资料  376 7.2 核心设计  376 7.2.1 API 设计  377 7.2.2 EFSWCore 的血肉之躯  377 7.2.3 EFSWCore 的灵魂  381 7.2.4 小结  385 7.3 编写JavaScript 类  386 7.3.1 类的设计  386 7.3.2 核心逻辑  388 7.3.3 简单容错  391 7.3.4 小结  393 7.4 进一步完善  393 7.4.1 C++ 代码的完善  393 7.4.2 JavaScript 代码的完善  398 7.4.3 小结  400 8 实战——现有包剖析  401 8.1 字符串哈希模块——Bling Hashes  401 8.1.1 文件设定  402 8.1.2 C++ 源码剖析  403 8.1.3 JavaScript 源码剖析  408 8.1.4 小结  409 8.1.5 参考资料  410 8.2 类 Proxy 包——Auto Object  410 8.2.1 Proxy  410 8.2.2 Auto Object 使用范例  412 8.2.3 代码剖析  415 8.2.4 小结  424 8.2.5 参考资料  424 9 N-API——下一代 Node.js C++ 扩展开发方式  425 9.1 浅尝辄止  426 9.1.1 实现一个 Echo 函数  426 9.1.2 尝试运行 N-API 扩展  430 9.1.3 向下兼容  431 9.1.4 N-API Package——C++ 封装  433 9.1.5 小结  433 9.1.6 参考资料  433 9.2 基本数据类型与错误处理  433 9.2.1 基本数据类型  433 9.2.2 与作用域及生命周期相关的数据类型  435 9.2.3 回调数据类型  438 9.2.4 错误处理  439 9.2.5 模块注册  441 9.2.6 小结  442 9.2.7 参考资料  442 9.3 对象与函数  442 9.3.1 对象  442 9.3.2 函数  448 9.3.3 类的封装  453 9.3.4 小结  455 9.3.5 参考资料  455 
  • 内容简介:
      Node.js 作为近几年新兴的一种编程运行时,托 V8 引擎的福,在作为后端服务时有比较高的运行效率,在很多场景下对于我们的日常开发足够用了。不过,它还为开发者开了一个使用C++ 开发 Node.js 原生扩展的口子,让开发者进行项目开发时有了更多的选择。  《Node.js:来一打 C++ 扩展》以 Chrome V8 的知识作为基础,配合 GYP 的一些内容,将教会大家如何使用 Node.js提供的一些 API 来编写其 C++ 的原生扩展。此外,在后续的进阶章节中,还会介绍原生抽象NAN 以及与异步相关的 libuv 知识,最后辅以几个实例来加深理解。不过,在学习本书内容之前,希望读者已经具备了初步的 Node.js 以及 C++ 基础。  阅读《Node.js:来一打 C++ 扩展》,相当于同时学习Chrome V8 开发、libuv 开发以及 Node.js 的原生 C++ 扩展开发知识,非常值得!
  • 目录:
    1 Node.js 的 C++ 扩展前驱知识储备  1 1.1 Node.js 的模块机制  2 1.1.1 CommonJS 的模块规范  2 1.1.2 Node.js 的模块  4 1.1.3 小结  9 1.1.4 参考资料  9 1.2 Node.js 的包机制  9 1.2.1 CommonJS 的包规范  9 1.2.2 Node.js / NPM 下的包  13 1.2.3 NPM 与 CNPM  16 1.2.4 小结  19 1.2.5 参考资料  19 1.3 Node.js 依赖简介  20 1.3.1 Chrome V8  20 1.3.2 libuv  25 1.3.3 其他依赖  28 1.3.4 小结  30 1.3.5 参考资料  30 1.4 C++ 扩展开发的准备工作  31 1.4.1 编辑器 / IDE  31 1.4.2 node-gyp  36 1.4.3 其他构建工具  54 1.4.4 小结  56 1.4.5 参考资料  56 2 C++ 模块原理简析  57 2.1 为什么要写 C++ 模块  57 2.1.1 C++ 比 JavaScript 解释器高效  57 2.1.2 已有的 C++ 轮子  72 2.1.3 小结  77 2.1.4 参考资料  77 2.2 什么是 C++ 扩展  78 2.2.1 C++ 模块本质  78 2.2.2 Node.js 模块加载原理  80 2.2.3 小结  102 2.2.4 参考资料  103 3 Chrome V8 基础  104 3.1 Node.js 与 Chrome V8  104 3.2 基本概念  105 3.2.1 内存机制  105 3.2.2 隔离实例(Isolate)  108 3.2.3 上下文(Context)  109 3.2.4 脚本(Script)  110 3.2.5 小结  110 3.2.6 参考资料  111 3.3 句柄(Handle)  111 3.3.1 本地句柄(Local)  112 3.3.2 持久句柄(Persistent)  115 3.3.3 永生句柄(Eternal)  119 3.3.4 待实本地句柄(Maybe Local)  119 3.3.5 小结  121 3.3.6 参考资料  121 3.4 句柄作用域  121 3.4.1 一般句柄作用域(Handle Scope)  122 3.4.2 可逃句柄作用域(Escapable Handle Scope)  125 3.4.3 小结  129 3.4.4 参考资料  129 3.5 上下文(Context)  129 3.6 模板(Template)  133 3.6.1 函数模板(Function Template)  133 3.6.2 对象模板(Object Template)  138 3.6.3 对象模板的访问器(Accessor)与拦截器(Interceptor)  144 3.6.4 对象模板的内置字段(Internal Field)  175 3.6.5 函数模板的继承(Inherit)  183 3.6.6 小结  188 3.6.7 参考资料  189 3.7 常用数据类型  189 3.7.1 基值(Value)  189 3.7.2 字符串(String)  194 3.7.3 数值类型  196 3.7.4 布尔类型(Boolean)  196 3.7.5 对象(Object)  196 3.7.6 函数(Function)  200 3.7.7 数组(Array)  202 3.7.8 JSON 解析器  203 3.7.9 函数回调信息(Function Callback Info)  203 3.7.10 函数返回值(Return Value)  204 3.7.11 隔离实例(Isolate)  204 3.7.12 小结  205 3.7.13 参考资料  206 3.8 异常机制  206 3.8.1 try-catch  206 3.8.2 抛出异常  209 3.8.3 异常生成类(Exception)  211 3.8.4 小结  211 3.8.5 参考资料  211 4 C++ 扩展实战初探  212 4.1 binding.gyp  212 4.1.1 惊鸿一瞥  213 4.1.2 binding.gyp 基础结构  213 4.1.3 GYP 文件  214 4.1.4 常用字段  221 4.1.5 小结  228 4.1.6 参考资料  228 4.2 牛刀小试  229 4.2.1 又是 Hello World  229 4.2.2 函数参数  232 4.2.3 回调函数  234 4.2.4 函数返回  238 4.2.5 小结  239 4.2.6 参考资料  240 4.3 循序渐进  240 4.3.1 C++ 与 JavaScript 类封装  240 4.3.2 实例化 C++ 类封装对象的函数  250 4.3.3 将 C++ 类封装对象传来传去  253 4.3.4 进程退出钩子  255 4.3.5 小结  259 4.3.6 参考资料  259 5 Node.js 原生抽象——NAN  260 5.1 Node.js 原生模块开发方式的变迁  260 5.1.1 以不变应万变  260 5.1.2 时代在召唤  261 5.1.3 小结  267 5.1.4 参考资料  267 5.2 基础开发  267 5.2.1 什么是 NAN  267 5.2.2 安装和配置  269 5.2.3 先睹为快——搭上NAN 的快车  270 5.2.4 基础帮助函数和宏  276 5.2.5 忽略 node_modules  279 5.2.6 小结  279 5.2.7 参考资料  280 5.3 JavaScript 函数  280 5.3.1 函数参数类型  280 5.3.2 函数声明  282 5.3.3 函数设置  288 5.3.4 小结  296 5.3.5 参考资料  296 5.4 常用帮助类与函数  296 5.4.1 句柄相关  296 5.4.2 创建数据对象  298 5.4.3 与数据对象“玩耍”  300 5.4.4 封装一个类  314 5.4.5 异常处理  315 5.4.6 小结  315 5.4.7 参考资料  316 5.5 NAN 中的异步机制  316 5.5.1 Nan::AsyncQueueWorker  316 5.5.2 Nan::Callback  317 5.5.3 Nan::AsyncWorker  317 5.5.4 Nan::AsyncProgressWorker  323 5.5.5 小结  327 5.5.6 参考资料  327 6 异步之旅——libuv  328 6.1 基础概念  329 6.1.1 事件循环  330 6.1.2 句柄(Handle)与请求(Request)  333 6.1.3 尝尝甜头  335 6.1.4 小结  340 6.1.5 参考资料  340 6.2 libuv 的跨线程编程基础  341 6.2.1 libuv 的线程  342 6.2.2 同步原语(Synchronization Primitive)  347 6.2.3 工作队列  355 6.2.4 小结  356 6.2.5 参考资料  357 6.3 跨线程通信  357 6.3.1 uv_async_t 句柄  357 6.3.2 Watchdog 半成品实战解析  358 6.3.3 Watchdog 试运行  367 6.3.4 小结  368 6.3.5 参考资料  369 7 实战——文件监视器  370 7.1 准备工作  370 7.1.1 功能规划  370 7.1.2 文件系统监听库——efsw  373 7.1.3 小结  376 7.1.4 参考资料  376 7.2 核心设计  376 7.2.1 API 设计  377 7.2.2 EFSWCore 的血肉之躯  377 7.2.3 EFSWCore 的灵魂  381 7.2.4 小结  385 7.3 编写JavaScript 类  386 7.3.1 类的设计  386 7.3.2 核心逻辑  388 7.3.3 简单容错  391 7.3.4 小结  393 7.4 进一步完善  393 7.4.1 C++ 代码的完善  393 7.4.2 JavaScript 代码的完善  398 7.4.3 小结  400 8 实战——现有包剖析  401 8.1 字符串哈希模块——Bling Hashes  401 8.1.1 文件设定  402 8.1.2 C++ 源码剖析  403 8.1.3 JavaScript 源码剖析  408 8.1.4 小结  409 8.1.5 参考资料  410 8.2 类 Proxy 包——Auto Object  410 8.2.1 Proxy  410 8.2.2 Auto Object 使用范例  412 8.2.3 代码剖析  415 8.2.4 小结  424 8.2.5 参考资料  424 9 N-API——下一代 Node.js C++ 扩展开发方式  425 9.1 浅尝辄止  426 9.1.1 实现一个 Echo 函数  426 9.1.2 尝试运行 N-API 扩展  430 9.1.3 向下兼容  431 9.1.4 N-API Package——C++ 封装  433 9.1.5 小结  433 9.1.6 参考资料  433 9.2 基本数据类型与错误处理  433 9.2.1 基本数据类型  433 9.2.2 与作用域及生命周期相关的数据类型  435 9.2.3 回调数据类型  438 9.2.4 错误处理  439 9.2.5 模块注册  441 9.2.6 小结  442 9.2.7 参考资料  442 9.3 对象与函数  442 9.3.1 对象  442 9.3.2 函数  448 9.3.3 类的封装  453 9.3.4 小结  455 9.3.5 参考资料  455 
查看详情
好书推荐 / 更多
Node.js:来一打 C++ 扩展
受命
止庵
Node.js:来一打 C++ 扩展
一把刀,千个字
王安忆
Node.js:来一打 C++ 扩展
拉丁语的故事:一种世界语言的历史
[德]于尔根·雷昂哈特(Jürgen Leonhardt)著 黄文前· 孙晓迪· 程雨凡 译
Node.js:来一打 C++ 扩展
甲骨文丛书·守护者:国际联盟与帝国危机
仇朝兵 译;苏珊·佩德森(Susan Pedersen)
Node.js:来一打 C++ 扩展
汗青堂丛书079·内战之殇:西班牙内战中的后方大屠杀
李晓泉 后浪 译 者;[英]保罗·普雷斯顿(Paul Preston)
Node.js:来一打 C++ 扩展
企鹅一战中国史
[英]乔纳森·芬比
Node.js:来一打 C++ 扩展
二十世纪中国史纲(全四卷)
金冲及 著
Node.js:来一打 C++ 扩展
炼狱的诞生(新史学译丛)
[法]雅克·勒高夫 著;周莽 译
Node.js:来一打 C++ 扩展
许渊冲百岁自述(杨振宁作序,真格基金联合创始人王强、著名出版人俞晓群联合推荐!)
许渊冲
Node.js:来一打 C++ 扩展
清江壮歌 马识途首部长篇小说 据自身经历改写的成名之作
马识途
Node.js:来一打 C++ 扩展
负动产时代:海量触目惊心的真实案例
郎旭冉 译 者;日本《朝日新闻》采访组
Node.js:来一打 C++ 扩展
代数的历史 人类对未知量的不舍追踪 修订版
[美]约翰·德比希尔(John Derbyshire)