From e78276af96d5a2352bf67ec3f47eb49e148b917c Mon Sep 17 00:00:00 2001 From: yanghao Date: Thu, 8 Aug 2024 15:24:48 +0800 Subject: [PATCH 1/3] Manage dynamic sessions the same as common sessions for acceptor --- acceptor.go | 53 ++++++++--------------------------------------------- 1 file changed, 8 insertions(+), 45 deletions(-) diff --git a/acceptor.go b/acceptor.go index f5b9b281c..a5c86ee0d 100644 --- a/acceptor.go +++ b/acceptor.go @@ -342,7 +342,6 @@ func (a *Acceptor) handleConnection(netConn net.Conn) { } a.dynamicSessionChan <- dynamicSession session = dynamicSession - defer session.stop() } a.sessionAddr.Store(sessID, netConn.RemoteAddr()) @@ -363,52 +362,16 @@ func (a *Acceptor) handleConnection(netConn net.Conn) { } func (a *Acceptor) dynamicSessionsLoop() { - var id int - var sessions = map[int]*session{} - var complete = make(chan int) - defer close(complete) -LOOP: for { - select { - case session, ok := <-a.dynamicSessionChan: - if !ok { - for _, oldSession := range sessions { - oldSession.stop() - } - break LOOP - } - id++ - sessionID := id - sessions[sessionID] = session - go func() { - session.run() - err := UnregisterSession(session.sessionID) - if err != nil { - a.globalLog.OnEventf("Unregister dynamic session %v failed: %v", session.sessionID, err) - return - } - complete <- sessionID - }() - case id := <-complete: - session, ok := sessions[id] - if ok { - a.sessionAddr.Delete(session.sessionID) - delete(sessions, id) - } else { - a.globalLog.OnEventf("Missing dynamic session %v!", id) - } - } - } - - if len(sessions) == 0 { - return - } - - for id := range complete { - delete(sessions, id) - if len(sessions) == 0 { - return + session, ok := <-a.dynamicSessionChan + if !ok { + break } + a.sessionGroup.Add(1) + go func() { + session.run() + a.sessionGroup.Done() + }() } } From 2ccd8ebc73039985ccd0e6673d9291f7607530a8 Mon Sep 17 00:00:00 2001 From: yanghao Date: Thu, 8 Aug 2024 20:09:00 +0800 Subject: [PATCH 2/3] adding session in the session list of acceptor when created --- acceptor.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/acceptor.go b/acceptor.go index a5c86ee0d..047b3c72e 100644 --- a/acceptor.go +++ b/acceptor.go @@ -335,13 +335,13 @@ func (a *Acceptor) handleConnection(netConn net.Conn) { a.globalLog.OnEventf("Session %v not found for incoming message: %s", sessID, msgBytes) return } - dynamicSession, err := a.sessionFactory.createSession(sessID, a.storeFactory, a.settings.globalSettings.clone(), a.logFactory, a.app) + a.sessions[sessID], err = a.sessionFactory.createSession(sessID, a.storeFactory, a.settings.globalSettings.clone(), a.logFactory, a.app) if err != nil { a.globalLog.OnEventf("Dynamic session %v failed to create: %v", sessID, err) return } - a.dynamicSessionChan <- dynamicSession - session = dynamicSession + a.dynamicSessionChan <- a.sessions[sessID] + session = a.sessions[sessID] } a.sessionAddr.Store(sessID, netConn.RemoteAddr()) From cefc34edb5cd4f26e085cc326df74ac8ba0ef6ae Mon Sep 17 00:00:00 2001 From: yanghao Date: Thu, 8 Aug 2024 21:04:26 +0800 Subject: [PATCH 3/3] code change --- acceptor.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/acceptor.go b/acceptor.go index 047b3c72e..a2f136a0f 100644 --- a/acceptor.go +++ b/acceptor.go @@ -335,13 +335,14 @@ func (a *Acceptor) handleConnection(netConn net.Conn) { a.globalLog.OnEventf("Session %v not found for incoming message: %s", sessID, msgBytes) return } - a.sessions[sessID], err = a.sessionFactory.createSession(sessID, a.storeFactory, a.settings.globalSettings.clone(), a.logFactory, a.app) + dynamicSession, err := a.sessionFactory.createSession(sessID, a.storeFactory, a.settings.globalSettings.clone(), a.logFactory, a.app) if err != nil { a.globalLog.OnEventf("Dynamic session %v failed to create: %v", sessID, err) return } - a.dynamicSessionChan <- a.sessions[sessID] - session = a.sessions[sessID] + a.sessions[sessID] = dynamicSession + a.dynamicSessionChan <- dynamicSession + session = dynamicSession } a.sessionAddr.Store(sessID, netConn.RemoteAddr())