1

准备开工

  1. 入门文档学习
  2. 使用ssvm构建一个nodejs应用,调用rust库
  3. 创建一个小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(&params).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

image


Tmacy
20 声望0 粉丝

记点东西