#go
#Вперед
Вопрос:
У меня есть небольшая программа WASM, которую я хотел бы протестировать в своей частной локальной сети (в основном на мобильных устройствах). Я могу обслуживать его в локальном цикле. Я надеялся создать простой маршрут страницы в go, который будет обрабатывать WASM и обслуживать его на устройствах в моей сети. К сожалению, тип содержимого application / wasm не распознается (я думаю).
Есть ли простой способ обслуживать index.html что внедрило WASM?
Я не уверен, как изменить это, чтобы разрешить тип содержимого:
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 %snn", port)
http.ListenAndServe(":" port, nil)
}
Комментарии:
1. возможно, вам также следует опубликовать тег «webassembly»
2. @AJR нет, это не проблема с «webassembly»
Ответ №1:
Что это значит «index.html что внедрило WASM»?
Я полагаю, у вас есть отдельный файл WASM, расположенный где-то в вашей файловой системе. В документации go рекомендуется использовать файлы WASM, подобные этому:
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).
then((result) => {
go.run(result.instance);
});
итак, браузер при загрузке index.html также запрашивает у вашего веб main.wasm
-сервера файл. Вы должны обработать это явно (добавьте этот вызов после вашего предыдущего вызова http.Функция обработки):
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
файлы) является обслуживание каталога hole с ресурсами (обычно я помещаю все необходимые ресурсы в эту папку — 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 в папку assets.
Комментарии:
1. @jeffspicoli очень странно — я сделал то же самое неделю назад, и мой мобильный телефон хорошо работает с wasm. Возможно, браузер на вашем телефоне не поддерживает wasm? В любом случае — я согласен, что эта технология сейчас не идеальна, и я не рекомендую использовать ее в производстве. Например, файлы wasm слишком тяжелые (если вы не компилируете с помощью tinygo).