准备开工
- 入门文档学习
- 使用ssvm构建一个nodejs应用,调用rust库
- 创建一个小demo
环境准备
rust
系统环境已经预装了rust(rustc 1.44.0),跳过rust环境部署。
PS: 系统为Manjaro
Node.js
没有nodejs环境,需要安装:yay -S nodejs npm
安装依赖
yay -S community/libcurl-gnutls
ssvm工具链
安装ssvm的工具链:npm install ssvmup
使用官方的npm install -g ssvmup遇到权限问题,可以使用--unsafe-perm
安装ssvm
安装ssvm: npm install ssvm
开始构建HELLO程序
Fork这个仓库:repo
在目录下进行build
ssvm-nodejs-starter git:(master) ssvmup build
ssvmup在安装时如果没有-g选项,会安装在$HOME/.config/目录下,可用ln重新为ssvmup创建一个链接
不过似乎手动安装需要的第三方库有点问题:
[INFO]: Installing wasm-bindgen...
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error { description: "Couldn\'t connect to server", code: 7, extra: None }', src/install/mod.rs:182:9
简单搜索发现需要联网0.0,但是我有网络啊,那就可能要梯子?
编译成功后:
Your wasm pkg is ready to publish at /home/tmacy/ssvm-nodejs-starter/pkg.
然而
开始运行服务时出现了错误:
node node/app.js
terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error'
what(): filesystem error: directory iterator cannot open directory: No such file or directory [/usr/lib/x86_64-linux-gnu]
[1] 2418864 abort (core dumped) node node/app.js
看起来似乎时cxx11的链接有问题,可能是第三方动态库的编译环境是ubuntu?
官方的环境要求看来是有原因的0.0
还是Docker大法好!换docker试试?然而可怜的网速,拖镜像太慢--!
仔细想了一下,直接建立软链接解决问题:sudo ln -s /usr/lib /usr/lib/x86_64-linux-gnu
终于输出了想要的内容:curl http://127.0.0.1:3000/?name=Wasm
hello Wasm
一个简单的web教学例子
根据实例程序进行修改,求两个数字最大公约数:
主要的rust代码src/lib.rs:
pub fn solve(params: &str) -> String {
let ps: (i32, i32) = serde_json::from_str(¶ms).unwrap();
let solution: i32;
solution = gcd(ps.0.abs(), ps.1.abs());
return serde_json::to_string(&solution).unwrap();
}
fn gcd(mut u: i32, mut v: i32) -> i32 {
if u == 0 {
return v;
}
if v == 0 {
return u;
}
let shift = (u | v).trailing_zeros();
u >>= shift;
v >>= shift;
u >>= u.trailing_zeros();
loop {
v >>= v.trailing_zeros();
if u > v {
//XOR swap algorithm
v ^= u;
u ^= v;
v ^= u;
}
v -= u; // Here v >= u.
if v == 0 {
break;
}
}
u << shift
}
运行:
node node/server.js
在浏览器中打开:
http://localhost:8080
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。