又是没有工作的一天, 想起了 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++的需要
- 这个地方和 Node 的
创建本地 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 库都挑好了, 现在懒得动手了 (🕊🕊🕊🕊🕊)