From 277f7e42263a4e4b30a3eb29b417326723bd71f7 Mon Sep 17 00:00:00 2001 From: dragon Date: Fri, 21 Nov 2025 13:54:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20event=20=E6=A1=88=E4=BE=8B?= =?UTF-8?q?=E9=94=99=E8=AF=AF=EF=BC=8C=E4=B8=BA=20redirect=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=87=8D=E5=AE=9A=E5=90=91=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/js_ws_event/event.js | 10 +++++++--- pkg/filters/redirect.go | 14 +++++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) 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 }