Skip to content

Commit a6748db

Browse files
committed
chore: use wasmhttp.Serve for WASM
1 parent 5c2bd51 commit a6748db

2 files changed

Lines changed: 74 additions & 0 deletions

File tree

pkg/node/api_js.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright 2020 The Swarm Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
//go:build js && wasm
6+
7+
package node
8+
9+
import (
10+
"io"
11+
"net/http"
12+
13+
"github.com/ethersphere/bee/v2/pkg/log"
14+
wasmhttp "github.com/nlepage/go-wasm-http-server/v2"
15+
)
16+
17+
// startAPIServer starts the API server for WASM builds.
18+
// In WASM, we use wasmhttp which hooks into the service worker's fetch handler.
19+
// Returns nil for server and closer since WASM doesn't need graceful shutdown.
20+
func startAPIServer(_ string, handler http.Handler, _ io.Writer, logger log.Logger) (*http.Server, io.Closer, error) {
21+
logger.Info("starting debug & api server via service worker")
22+
23+
// wasmhttp.Serve registers the handler with the service worker
24+
// by calling self.wasmhttp.setHandler in JavaScript
25+
wasmhttp.Serve(handler)
26+
27+
return nil, nil, nil
28+
}

pkg/node/api_native.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright 2020 The Swarm Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
//go:build !js
6+
7+
package node
8+
9+
import (
10+
"context"
11+
"errors"
12+
"fmt"
13+
"io"
14+
stdlog "log"
15+
"net"
16+
"net/http"
17+
"time"
18+
19+
"github.com/ethersphere/bee/v2/pkg/log"
20+
)
21+
22+
// startAPIServer starts the API server for native builds using TCP listener.
23+
func startAPIServer(addr string, handler http.Handler, errorLogWriter io.Writer, logger log.Logger) (*http.Server, io.Closer, error) {
24+
listener, err := (&net.ListenConfig{}).Listen(context.Background(), "tcp", addr)
25+
if err != nil {
26+
return nil, nil, fmt.Errorf("api listener: %w", err)
27+
}
28+
29+
server := &http.Server{
30+
IdleTimeout: 30 * time.Second,
31+
ReadHeaderTimeout: 3 * time.Second,
32+
Handler: handler,
33+
ErrorLog: stdlog.New(errorLogWriter, "", 0),
34+
}
35+
36+
go func() {
37+
logger.Info("starting debug & api server", "address", listener.Addr())
38+
39+
if err := server.Serve(listener); err != nil && !errors.Is(err, http.ErrServerClosed) {
40+
logger.Debug("debug & api server failed to start", "error", err)
41+
logger.Error(nil, "debug & api server failed to start")
42+
}
43+
}()
44+
45+
return server, server, nil
46+
}

0 commit comments

Comments
 (0)