Merge pull request #91 from syumai/init-go-instance-on-request

init Go instance on request
This commit is contained in:
syumai 2024-01-24 22:12:27 +09:00 committed by GitHub
commit 151971832c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 6 deletions

View File

@ -1,8 +1,6 @@
import "./wasm_exec.js";
import { connect } from 'cloudflare:sockets';
const go = new Go();
let mod;
globalThis.tryCatch = (fn) => {
@ -22,6 +20,8 @@ export function init(m) {
}
async function run(ctx) {
const go = new Go();
let ready;
const readyPromise = new Promise((resolve) => {
ready = resolve;

View File

@ -12,7 +12,10 @@ import (
"github.com/syumai/workers/internal/runtimecontext"
)
var httpHandler http.Handler
var (
httpHandler http.Handler
closeCh = make(chan struct{})
)
func init() {
var handleRequestCallback js.Func
@ -40,6 +43,15 @@ func init() {
jsutil.Binding.Set("handleRequest", handleRequestCallback)
}
type appCloser struct {
io.ReadCloser
}
func (c *appCloser) Close() error {
defer close(closeCh)
return c.ReadCloser.Close()
}
// handleRequest accepts a Request object and returns Response object.
func handleRequest(reqObj js.Value, runtimeCtxObj js.Value) (js.Value, error) {
if httpHandler == nil {
@ -55,7 +67,7 @@ func handleRequest(reqObj js.Value, runtimeCtxObj js.Value) (js.Value, error) {
w := &jshttp.ResponseWriter{
HeaderValue: http.Header{},
StatusCode: http.StatusOK,
Reader: reader,
Reader: &appCloser{reader},
Writer: writer,
ReadyCh: make(chan struct{}),
}
@ -79,5 +91,7 @@ func Serve(handler http.Handler) {
}
httpHandler = handler
ready()
select {}
select {
case <-closeCh:
}
}

View File

@ -10,7 +10,7 @@ import (
type ResponseWriter struct {
HeaderValue http.Header
StatusCode int
Reader *io.PipeReader
Reader io.ReadCloser
Writer *io.PipeWriter
ReadyCh chan struct{}
Once sync.Once