diff --git a/examples/js_ws_event/event.js b/examples/js_ws_event/event.js index e858baa..1e1af4f 100644 --- a/examples/js_ws_event/event.js +++ b/examples/js_ws_event/event.js @@ -12,11 +12,15 @@ async function eventPull() { await ws.writeText(data); } } - async function messagePull() { while (true) { const data = await ws.readText() - if (data === "exit") break; + if (data === "exit") + await event.put("messages", JSON.stringify({ + name:name, + data: name+' 已断开连接' + })); + break; if (data?.trim()) { await event.put("messages", JSON.stringify({ name:name, @@ -27,5 +31,5 @@ async function messagePull() { } (async () => { - await Promise.all([eventPull(), messagePull()]) + await Promise.any([eventPull(), messagePull()]) })() \ No newline at end of file diff --git a/pkg/filters/redirect.go b/pkg/filters/redirect.go index 5cddde0..55a86c1 100644 --- a/pkg/filters/redirect.go +++ b/pkg/filters/redirect.go @@ -15,7 +15,16 @@ import ( var portExp = regexp.MustCompile(`:\d+$`) -func FilterInstRedirect(_ core.Params) (core.FilterInstance, error) { +func FilterInstRedirect(g core.Params) (core.FilterInstance, error) { + var global struct { + Scheme string `json:"scheme"` + } + if err := g.Unmarshal(&global); err != nil { + return nil, err + } + if global.Scheme == "" { + global.Scheme = "https" + } return func(config core.Params) (core.FilterCall, error) { var param struct { Targets []string `json:"targets"` @@ -42,12 +51,11 @@ func FilterInstRedirect(_ core.Params) (core.FilterInstance, error) { if strings.HasSuffix(path, "/index.html") || path == "index.html" { path = strings.TrimSuffix(path, "index.html") } - target, err := url.Parse(fmt.Sprintf("https://%s/%s", param.Targets[0], path)) + target, err := url.Parse(fmt.Sprintf("%s://%s/%s", global.Scheme, param.Targets[0], path)) if err != nil { return err } target.RawQuery = request.URL.RawQuery - http.Redirect(writer, request, target.String(), param.Code) return nil }