diff --git a/core/connection.go b/core/connection.go index 00e48aa..8007251 100644 --- a/core/connection.go +++ b/core/connection.go @@ -8,7 +8,6 @@ import ( "git.noahlan.cn/noahlan/nnet/scheduler" "git.noahlan.cn/noahlan/ntools-go/core/nlog" "git.noahlan.cn/noahlan/ntools-go/core/pool" - "io" "net" "sync/atomic" ) @@ -71,7 +70,7 @@ func newConnection(server *engine, conn net.Conn) *connection { _, r.isWS = conn.(*WSConn) // binding session - r.session = newSession(r) + r.session = newSession(r, server.sessIdMgr.SessionID()) return r } @@ -204,12 +203,18 @@ func (r *connection) read() { for { n, err := r.conn.Read(buf) //nlog.Debugf("receive data %v", buf[:n]) - if err != nil && err != io.EOF { + if err != nil { nlog.Errorf("%s [readLoop] Read message error: %s, session will be closed immediately", r.ngin.logPrefix(), err.Error()) return } + if n == 0 { + nlog.Errorf("%s [readLoop] Read empty message, session will be closed immediately", + r.ngin.logPrefix()) + return + } + if r.packer == nil { nlog.Errorf("%s [readLoop] unexpected error: packer is nil", r.ngin.logPrefix()) return diff --git a/core/engine.go b/core/engine.go index e2f79d5..aadf1c0 100644 --- a/core/engine.go +++ b/core/engine.go @@ -50,6 +50,7 @@ type ( wsOpt wsOptions // websocket connManager *conn2.Manager + sessIdMgr *sessionIDMgr } wsOptions struct { @@ -70,6 +71,7 @@ func newEngine(conf config.EngineConf) *engine { routes: make([]Route, 0), taskTimerPrecision: conf.TaskTimerPrecision, connManager: conn2.NewManager(), + sessIdMgr: newSessionIDMgr(), } pool.InitPool(conf.Pool) diff --git a/core/session.go b/core/session.go index 9293fd0..c6c84bf 100644 --- a/core/session.go +++ b/core/session.go @@ -17,9 +17,9 @@ type session struct { data map[string]interface{} // session数据存储(内存) } -func newSession(entity entity.NetworkEntity) *session { +func newSession(entity entity.NetworkEntity, id int64) *session { return &session{ - id: sessionIDMgrInstance.SessionID(), + id: id, entity: entity, uid: "", data: make(map[string]interface{}), @@ -110,8 +110,6 @@ func (s *session) Close() { s.Invalidate() } -var sessionIDMgrInstance = newSessionIDMgr() - type sessionIDMgr struct { count int64 sid int64