103 lines
2.1 KiB
Markdown
103 lines
2.1 KiB
Markdown
# WebAssembly Test Server
|
|
|
|
Simple Go web server for serving WebAssembly files with correct MIME types.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Build and run the server
|
|
go run server.go
|
|
|
|
# Or with custom port
|
|
go run server.go -port 3000
|
|
|
|
# Or serve from a different directory
|
|
go run server.go -dir /path/to/wasm/files
|
|
```
|
|
|
|
## Build and Install
|
|
|
|
```bash
|
|
# Build binary
|
|
go build -o wasm-server server.go
|
|
|
|
# Run
|
|
./wasm-server
|
|
|
|
# Install to PATH
|
|
go install
|
|
```
|
|
|
|
## Usage
|
|
|
|
Once the server is running, open your browser to:
|
|
- http://localhost:8080/
|
|
|
|
The server will serve:
|
|
- `index.html` - Main HTML page
|
|
- `hello.js` - JavaScript loader for WASM
|
|
- `hello.wasm` - WebAssembly binary module
|
|
- `hello.wat` - WebAssembly text format (for reference)
|
|
|
|
## Files
|
|
|
|
- **server.go** - Go web server with WASM MIME type support
|
|
- **index.html** - HTML page that loads the WASM module
|
|
- **hello.js** - JavaScript glue code to instantiate and run WASM
|
|
- **hello.wasm** - Compiled WebAssembly binary
|
|
- **hello.wat** - WebAssembly text format source
|
|
|
|
## Building WASM Files
|
|
|
|
### From WAT (WebAssembly Text Format)
|
|
|
|
```bash
|
|
# Install wabt tools
|
|
sudo apt install wabt
|
|
|
|
# Compile WAT to WASM
|
|
wat2wasm hello.wat -o hello.wasm
|
|
|
|
# Disassemble WASM back to WAT
|
|
wasm2wat hello.wasm -o hello.wat
|
|
```
|
|
|
|
### From Go (using TinyGo)
|
|
|
|
```bash
|
|
# Install TinyGo
|
|
wget https://github.com/tinygo-org/tinygo/releases/download/v0.31.0/tinygo_0.31.0_amd64.deb
|
|
sudo dpkg -i tinygo_0.31.0_amd64.deb
|
|
|
|
# Create Go program
|
|
cat > main.go << 'EOF'
|
|
package main
|
|
|
|
import "fmt"
|
|
|
|
func main() {
|
|
fmt.Println("Hello from Go WASM!")
|
|
}
|
|
EOF
|
|
|
|
# Compile to WASM
|
|
tinygo build -o main.wasm -target=wasm main.go
|
|
|
|
# Get the WASM runtime helper
|
|
cp $(tinygo env TINYGOROOT)/targets/wasm_exec.js .
|
|
```
|
|
|
|
## Browser Console
|
|
|
|
Open your browser's developer console (F12) to see the output from the WASM module.
|
|
|
|
The `hello.wasm` module should print "Hello, World!" to the console.
|
|
|
|
## CORS Headers
|
|
|
|
The server includes CORS headers to allow:
|
|
- Cross-origin requests during development
|
|
- Loading WASM modules from different origins
|
|
|
|
This is useful when developing and testing WASM modules.
|