使用 C++ 创建异步 Node.js 扩展

简介

有时候 C++ 插件会执行非常耗时的任务,为了避免阻塞 Node.js 的事件循环,我们应该异步的运行耗时的任务。

对于 C++ 写的 Node.js 插件,有两种方式完成耗时的异步任务:

  1. 依赖 Node.js 的异步能力,Node.js 会起多个线程,其中一个主线程运行事件循环,其它线程为工作线程,来执行耗时任务。
  2. 在 C++ 里自己起一个线程运行耗时任务。

一般的异步任务可以用第一种方式完成,但是 Node.js 起的工作线程有限,且还需要运行其它任务,如果需要开更多的线程可以使用第二种方式。

使用 python 控制米家智能设备

协议

小米智能设备之间的通信协议早已有大佬总结出来了。详情见: https://github.com/OpenMiHome/mihome-binary-protocol

也有大佬根据协议写了一个 Python 库来控制米家智能设备,python-miio

对于每一台设备,在配对连接后,都会有一个 token, miio 库需要这个 token 和设备的 ip 地址来控制设备,所以我们需要做的就是拿到我们需要控制的智能设备的 token 和 ip。

使用 C++ 创建 Node.js 扩展

简介

Node.js 插件是一个 C++ 写的动态链接库。Node.js 中的 require() 可以直接加载插件作为一个 Node.js 模块。插件提供了 Node.js 与 C++ 库之间的接口。

实现插件有三种方式:N-API, nan 和直接用内部的 V8, libuv 以及 Node.js 库。官方推荐使用 N-API 实现插件,除非要用到 N-API 没有暴露出来的接口。

使用 makeself 创建 Linux 安装包

安装包的格式

这种安装包的格式非常简单

|----------|
| 安装脚本 |
|----------|
| 压缩包   |
|----------|

安装包由一个文件组成,文件的前面是一段脚本,后面的就是一个压缩包。

当运行安装包时,会执行前面的脚本,对后面的压缩包进行处理。

C++11 中的async和future

一次性事件

当我们在候车时,我们会通过一些其他的方式打发时间,但是我们的根本目的是等待火车发车。这种等待是一次性的,车来了,我们走了。我们会再一次等车,但是两次等车没有关联。