Add a empty slice notify to kick dead clients idling on dead streams.

This commit is contained in:
2026-08-12 21:09:54 +08:00
parent fa8a76f53c
commit 91130a66be
+3
View File
@@ -56,6 +56,7 @@ type UpstreamContext struct {
var upstreamContexts = make(map[string]*UpstreamContext) var upstreamContexts = make(map[string]*UpstreamContext)
var upstreamContextLock = &sync.Mutex{} var upstreamContextLock = &sync.Mutex{}
var emptySlice []byte
func GetUpstreamContext(name string) *UpstreamContext { func GetUpstreamContext(name string) *UpstreamContext {
upstreamContextLock.Lock() upstreamContextLock.Lock()
@@ -127,6 +128,8 @@ func upstreamFiber(name string) {
fmt.Printf("Connecting to upstream for stream %s ...\n", name) fmt.Printf("Connecting to upstream for stream %s ...\n", name)
r := (func() *http.Response { r := (func() *http.Response {
for { for {
// Notify with an empty slice, so the client fiber could kick dead clients.
ctx.upstreamChan <- emptySlice
r, err := client.Do(req) r, err := client.Do(req)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "Unable to request %s for stream %s: %v\n", upstreams[name], name, err) fmt.Fprintf(os.Stderr, "Unable to request %s for stream %s: %v\n", upstreams[name], name, err)