🍹 树莓派上的高性能 Node.js 应用

Mar 08, 2020 • 4 minutes to read

树莓派(Raspberry Pi) 是一款功能强大的计算机,个头小巧。树莓派最便宜的机型是 Raspberry Pi Zero, 可以运行功能齐全的 Linux 发行版并驱动高清显示。Raspberry Pi 与3个硬币放在一起一样大,售价 5 美元。 Raspberry Pi Zero W 售价10美元,有集成的 WiFi 和蓝牙。

免费获得树莓派套件(价值25美元)

raspberry pi

借助通用的 ARM CPU 和便捷的联网功能,树莓派可以轻松地成为个人应用服务器。例如,你可以将 Web 应用放在树莓派上,并带到会议上。参加会议的每个人都可以访问这个文档,甚至不需要互联网。这个设备完全去中心,并且不受审查。

个人服务器对开发者特别有用。这样你就可以有一个单独的环境来部署和测试服务端应用程序,不必把笔记本电脑弄乱。个人开发服务器就像打了兴奋剂的 Docker。

但同时, 5 美金的树莓派显然是资源受限的服务器。树莓派只有512MB 的 RAM 和一个 CPU 内核。运行轻量级高性能应用时,树莓派让人爱不释手。但与此同时,我们还喜欢“重量级”脚本语言的易用性和开发者的生产力,比如 JavaScript。

但是,我们不想做选择,这两个好处我们都想要。

我们的解决方案是在 Node.js JavaScript 应用程序内部署高性能和资源有效的 Rust 函数。Second State WebAssembly 虚拟机(SSVM)为 Rust 代码提供了轻便,高效,安全和可移植的运行时。在本文中,我将教你如何设置SSVM,并创建 Rust 函数。

在树莓派上安装 Ubuntu

要将树莓派用作个人开发服务器,强烈建议安装最新的 Ubuntu Server 20.04 TLS。操作十分简单,只需使用 Raspberry Pi Imager 选择 Ubuntu Server 20.04 image,并将其加载到 MicroSD 卡上即可。记得在 MicroSD 卡上设置 WiFi 连接。

如果购买的是带有预装 MicroSD 卡的树莓派套件,它可能自带树莓派操作系统 OS (叫做 NOOBS)。NOOBS 兼容 SSVM 0.3.6 版和 ssvmup 0.1.11 版本。SSVM 与 ssvmup 也能在这上面运行,就是需要花点功夫。

将 MicroSD 卡插入树莓派设备的卡槽中,连接 HDMI 显示器、键盘、鼠标。打开电源,按照屏幕上的说明安装 Ubuntu Server 20.04。在这里创建一个账号,连接到 WiFi,打开 SSH,然后打开命令行终端。

为了将树莓派设备用作 headless 服务器,从路由器请求一个静态 IP 地址。将来,只需打开电源,就可以通过 SSH 从笔记本电脑连接到它:无需显示器,键盘和鼠标。设置完成后,使用以下命令在本地网络上找到树莓派的 IP 地址。

$ hostname -I
192.168.2.108 172.17.0.1

与所有新安装的 Linux 一样,最好更新和升级到最新的软件包。运行以下命令,进行升级更新。请耐心等待,可能要花一个小时。

`$ sudo apt update && sudo apt upgrade`

接下来,运行以下命令,安装必需的开发者库。

$ sudo apt install build-essential curl unzip libboost-all-dev

安装 Node.js 和 SSVM

这两个命令是在树莓派上安装 Node.js 。

$ curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
$ sudo apt install nodejs

从这里开始,可以使用 npm 来安装模块。在这里,我们安装了 Second State 虚拟机(SVM),以支持 Node.js 应用程序中的高性能 Rust 函数。

$ npm install ssvm

接下来让我们试着运行几个 demo 应用。

运行一个 Node.js demo 应用

从网上得到这个 demo 应用,并解压该文件。

$ curl -O https://www.secondstate.io/download/quadratic.zip
$ unzip quadratic.zip

接下来,运行一个测试程序,以确保 Node.js JavaScript 函数可以通过SSVM 正确调用 Rust 函数。

$ cd quadratic/node
$ node test.js
[0.5,-3.0]

从命令行终端启动 Node.js 服务器应用。

$ npm install express // Required for the web app.
$ cd quadratic/node
$ node server.js

将浏览器指向 http://localhost:8080/ 或者可以从你网络上的另一个计算机访问这个程序。

raspberry pi

这是一个用来教授数学并解决二次方程的 Web 应用。在小班教学场景里,用起来很方便!

安装开发者工具

其实个人服务器上并不需要开发者工具。树莓派虽小但功能强大,足以编译和构建软件。在实际生活中,我们常常用树莓派教授编程。 树莓派操作系统预装了 Java、Python 和 Scratch 开发者工具。现在,让我们在上面安装一些严肃的工具!我个人会在所有开发环境上安装 Git。

$ sudo apt install git

下面的命令是在树莓派上安装 Rust 编译器工具链。

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

运行下面的命令,无需注销和再次登录就能设置正确的路径。

$ source $HOME/.cargo/env

接下来,clone Rust 学习资料库,从示例中学习。

$ git clone https://github.com/second-state/wasm-learning.git

这是 Hello World 的例子。要玩得开心!

$ cd wasm-learning/rust/hello
$ cargo build
   Compiling hello v0.1.0 (/home/pi/Dev/wasm-learning/rust/hello)
    Finished dev [unoptimized + debuginfo] target(s) in 4.35s
$ target/debug/hello
Hello, world!

查看 Rust 官网Rust by Example 系列书籍以获取更多学习资源。

接下来

现在,可以肆意摆弄树莓派啦。

接下来,查看更多关于如何在资源受限的树莓派个人开发服务器上创建高性能 Node.js Web 应用的资料。

玩得开心,欢迎分享你是怎样利用树莓派的。

RustRaspberry PiNode.jsWebAssemblygetting-started
A high-performance, extensible, and hardware optimized WebAssembly Virtual Machine for automotive, cloud, AI, and blockchain applications