- 先讲原理
js异步处理 通过Libuv实现
- 思路 仿照node.js使用V8,Libuv ,C++ Layer
- 第一步 配置V8库 为了避免因为你的电脑环境不同,引发的各种奇怪编译问题,我们直接在gitpod上创建一个环境模版 gitpod.io/new/#snapsh…
打开线上vscode编辑器
进入 capivara文件夹 运行 start.sh ,然后make
cd capivara
./start.sh
make
然后就可以看到文件夹下多了一个bin目录
验证这点可以 先把bin目录删除 重新运行make命令看看
运行 ./bin/capivara index.js 可以看到index.js文件被运行
再试试运行 make uv-timers命令
修改index.js 尝试调用setTimeout和console.log 会发现这两个方法还没有被实现, print可以使用,因为它是c++的方法
现在我们来自己写一个timeout函数,使index.js能调用timeout方法
创建 app/src/timer.hpp文件
#include <v8.h>
#include <uv.h>
uv_loop_t *loop;
class Timer
{
public:
static void Initialize(uv_loop_t *evloop)
{
loop = evloop;
}
static void Timeout(const v8::FunctionCallbackInfo<v8::Value> &args)
{
}
};
在capivara.hpp中引入 timer.hpp
添加如下代码
index.js中书写timeout函数调用 ,
命令行执行 ./start.sh 发现终端没有报错,说明timeout函数运行了