我有一个小的WASM程序,我想在我的专用LAN(主要是移动设备)上进行测试。我可以在本地环回中提供服务。我希望在go中创建一个简单的页面路由,该页面路由可以处理WASM并将其提供给网络上的设备。不幸的是,应用程序/ wasm内容类型无法识别(我认为)。
是否有一种简单的方法来提供嵌入WASM的index.html?
我不确定如何修改它以允许使用Content-Type:
package main
import (
"io/ioutil"
"log"
"net/http"
"os"
)
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "5000"
}
f, _ := os.Create("/var/log/golang/golang-server.log")
defer f.Close()
log.SetOutput(f)
const indexPage = "public/index.html"
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
log.Printf("Serving %s to %s...\n", indexPage, r.RemoteAddr)
http.ServeFile(w, r, indexPage)
})
log.Printf("Listening on port %s\n\n", port)
http.ListenAndServe(":"+port, nil)
}
答案 0 :(得分:0)
“嵌入WASM的index.html”是什么意思?
我想您有一个单独的WASM文件,位于文件系统中的某个位置。 在go文档中,建议使用WASM文件,如下所示:
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).
then((result) => {
go.run(result.instance);
});
因此,浏览器在加载index.html时也会向您的网络服务器询问main.wasm
文件。您必须明确处理它(在上次调用http.HandleFunc之后添加此调用):
http.HandleFunc("/main.wasm", func(w http.ResponseWriter, r *http.Request) {
log.Printf("Serving WASM to %s...\n", r.RemoteAddr)
http.ServeFile(w, r, "path/to/wasm/file")
})
但是,提供静态内容(包括.wasm
文件)的更简单方法是使用资产提供漏洞目录(通常我将所有必需的资源放入此文件夹-js,css,图像等):
http.Handle(
"/assets/",
http.StripPrefix("/assets/", http.FileServer(http.Dir("path/to/assets/folder")))
)
在这种情况下,将JavaScript代码instantiateStreaming(fetch("main.wasm"), go.importObject)
替换为instantiateStreaming(fetch("/assets/main.wasm"), go.importObject)
,然后将wasm文件放入资产文件夹中。