跳到主要内容

Chrome NaCl 开发

· 9 分钟阅读
月子喵

又是没有工作的一天, 想起了 Chrome APP(Secure Shell App)这个东西 启动的时候会显示一句 正在加载 NaCl 插件, 当时对这个 NACL 感兴趣了, 现在有时间可以来补充一下知识了

NACL 这玩意已经出了 N年了,但是社区使用率不是很高, 2019年 12 月以后 chrome 将要开始弃用这个模块, 需要转到 Emscripten(但是这玩意阉割了好多东西, TCP,UDP 都不是完整的了), 大力发展 WebAssembly

虽然快没了,但是象征性的学习一下开发, 难度也不是很高

49年入国军 ????

下面的项目的代码地址, 有需要的可以参考一下

安装

打开 NACL 支持

先检查 nacl 是否开启, 进入 chrome://nacl/

加载中.....

首先打开 nacl flag, 参见 打开 nacl ,

加载中.....

启动成功之后在此进入 chrome://nacl/

加载中.....

安装 SDK

先按照下方的 Prerequisites 准备好 Python 2.7 已经 make等依赖, 下载 SDK , 解压 并进入目录, 执行./naclsdk list

加载中.....

可以查看已经安装的 sdk 版本(上面已经安装好 pepper_55-beta了)

安装最新版本的 SDK ./naclsdk install pepper_55

加载中.....

下载完毕之后可以看到 sdk 目录下增加了 pepper_55 文件夹, 里面有 各种的 例子,教程啥的

做点啥

想起来以前的 CoolQ 的 UDP 插件, 就做一个 webqq 算了, 如果可以就打算移植到 ChromeOS (半桶水 C++警告⚠️)

这个只是闲的蛋疼, 有其他的 Coolq 插件可以直接把数据转发到 前端 上

新建项目

你从例子里面随意拷贝, 仿照一个

关于在 Clion 里面无法补全的问题 (参考下方 CmakeList.txt, 修改 SDK 地址)

加载中.....

权限

manifest.json中添加

加载中.....

处理 SOCKET

  • 使用 HostResolver 处理地址

    • 这个地方和 Node 的 dgram 是不一样的, Node 不需要创建就可以发送, 但是 C++的需要
  • 创建本地 UDP Sever 监听

  • 接收信息

  • 发送握手🤝信息

下面所有的函数都是按顺序的, 一个 请求 一个 callback, 收到信息之后调用 PostMessage 传递到前端页面

有一个注意的地方 对于 IP 地址有一个写法 PP_NetAddress_IPv4 ipv4_addr = { 0, { 192, 168, 50, 126 } }; 但是这个实际是调用不了的, 不知道被发到啥地方去了

我尝试加在CFLAGS了一个 -std=c++14以使用 lambda, 但是有些地方会报错, 就没使用了, 这个回调写的人很难受

部分代码来自 /nacl_sdk/pepper_55/examples/api/socket例子

加载中.....

编译

make

浏览器接收

这里没啥技术点, 主要是不能直接在 html 加载 embed标签, 原因是加载 nval 的时候你的 js 监听代码可能并没有被执行, 从而漏掉一些信息

加载中.....

懒癌后期了, 当时 UI 库都挑好了, 现在懒得动手了 (🕊🕊🕊🕊🕊)