与终端中的 运行 二进制文件相比,wasm 二进制文件给出了错误的输出
wasm binary giving wrong output as compared to running binary in terminal
我有一个 go 程序 (https://github.com/klauspost/cpuid),我在我的终端中 运行,它工作得很好。
我想让它像浏览器中的服务 运行 一样。我看到的唯一可能的方法是将其编译为 wasm 二进制文件并静态提供文件。
但问题是,终端和浏览器的输出是不同的。我在这里遗漏了什么吗?
- go 代码在上面共享的 repo 中可用
- programm 使用
GOOS=js GOARCH=wasm go build -o test.wasm test.go
编译为 wasm
- 静态服务的 Js 代码
const http = require('http');
const nStatic = require('node-static');
// wasm file is in public folder.
// wasm_exec.js is used which is available in go installtion
const fileServer = new nStatic.Server('./public');
const PORT = 8000;
http.createServer(function (req, res) {
fileServer.serve(req, res);
}).listen(PORT);
In browser
In terminal
虽然最后两者都 运行 相同 CPU 从技术上讲这是不正确的。 WASM 是虚拟 CPU 的字节码。大多数浏览器将该字节码翻译成机器字节码,然后执行。但它保证了从这个虚拟机几乎无法访问真实机器,除非他接受 API。因此,无论它们最有可能下降的功能是什么,或者被虚拟功能取代的地方,等等 return 错误代码或虚拟值,以某种方式选择它们可以与实际值区分开来。
我有一个 go 程序 (https://github.com/klauspost/cpuid),我在我的终端中 运行,它工作得很好。 我想让它像浏览器中的服务 运行 一样。我看到的唯一可能的方法是将其编译为 wasm 二进制文件并静态提供文件。
但问题是,终端和浏览器的输出是不同的。我在这里遗漏了什么吗?
- go 代码在上面共享的 repo 中可用
- programm 使用
GOOS=js GOARCH=wasm go build -o test.wasm test.go
编译为 wasm
- 静态服务的 Js 代码
const http = require('http');
const nStatic = require('node-static');
// wasm file is in public folder.
// wasm_exec.js is used which is available in go installtion
const fileServer = new nStatic.Server('./public');
const PORT = 8000;
http.createServer(function (req, res) {
fileServer.serve(req, res);
}).listen(PORT);
In browser
In terminal
虽然最后两者都 运行 相同 CPU 从技术上讲这是不正确的。 WASM 是虚拟 CPU 的字节码。大多数浏览器将该字节码翻译成机器字节码,然后执行。但它保证了从这个虚拟机几乎无法访问真实机器,除非他接受 API。因此,无论它们最有可能下降的功能是什么,或者被虚拟功能取代的地方,等等 return 错误代码或虚拟值,以某种方式选择它们可以与实际值区分开来。