Commit 058d6525 authored by fangyincheng's avatar fangyincheng

Mod: don't use read queue

parent cd6ab9c8
...@@ -153,7 +153,6 @@ type Session interface { ...@@ -153,7 +153,6 @@ type Session interface {
SetReader(Reader) SetReader(Reader)
SetWriter(Writer) SetWriter(Writer)
SetCronPeriod(int) SetCronPeriod(int)
SetRQLen(int)
SetWQLen(int) SetWQLen(int)
SetWaitTime(time.Duration) SetWaitTime(time.Duration)
SetTaskPool(*TaskPool) SetTaskPool(*TaskPool)
......
...@@ -65,8 +65,7 @@ type session struct { ...@@ -65,8 +65,7 @@ type session struct {
reader Reader // @reader should be nil when @conn is a gettyWSConn object. reader Reader // @reader should be nil when @conn is a gettyWSConn object.
writer Writer writer Writer
// read & write // write
rQ chan interface{}
wQ chan interface{} wQ chan interface{}
// handle logic // handle logic
...@@ -274,18 +273,6 @@ func (s *session) SetCronPeriod(period int) { ...@@ -274,18 +273,6 @@ func (s *session) SetCronPeriod(period int) {
s.period = time.Duration(period) * time.Millisecond s.period = time.Duration(period) * time.Millisecond
} }
// set @session's read queue size
func (s *session) SetRQLen(readQLen int) {
if readQLen < 1 {
panic("@readQLen < 1")
}
s.lock.Lock()
defer s.lock.Unlock()
s.rQ = make(chan interface{}, readQLen)
log.Debug("%s, [session.SetRQLen] rQ{len:%d, cap:%d}", s.Stat(), len(s.rQ), cap(s.rQ))
}
// set @session's Write queue size // set @session's Write queue size
func (s *session) SetWQLen(writeQLen int) { func (s *session) SetWQLen(writeQLen int) {
if writeQLen < 1 { if writeQLen < 1 {
...@@ -465,10 +452,6 @@ func (s *session) run() { ...@@ -465,10 +452,6 @@ func (s *session) run() {
s.wQ = make(chan interface{}, defaultQLen) s.wQ = make(chan interface{}, defaultQLen)
} }
if s.rQ == nil && s.tPool == nil {
s.rQ = make(chan interface{}, defaultQLen)
}
// call session opened // call session opened
s.UpdateActive() s.UpdateActive()
if err := s.listener.OnOpen(s); err != nil { if err := s.listener.OnOpen(s); err != nil {
...@@ -491,7 +474,6 @@ func (s *session) handleLoop() { ...@@ -491,7 +474,6 @@ func (s *session) handleLoop() {
wsConn *gettyWSConn wsConn *gettyWSConn
// start time.Time // start time.Time
counter gstime.CountWatch counter gstime.CountWatch
inPkg interface{}
outPkg interface{} outPkg interface{}
) )
...@@ -521,7 +503,7 @@ LOOP: ...@@ -521,7 +503,7 @@ LOOP:
case <-s.done: case <-s.done:
// this case branch assure the (session)handleLoop gr will exit before (session)handlePackage gr. // this case branch assure the (session)handleLoop gr will exit before (session)handlePackage gr.
if atomic.LoadInt32(&(s.grNum)) == 1 { // make sure @(session)handlePackage goroutine has been closed. if atomic.LoadInt32(&(s.grNum)) == 1 { // make sure @(session)handlePackage goroutine has been closed.
if len(s.rQ) == 0 && len(s.wQ) == 0 { if len(s.wQ) == 0 {
log.Infof("%s, [session.handleLoop] got done signal. Both rQ and wQ are nil.", s.Stat()) log.Infof("%s, [session.handleLoop] got done signal. Both rQ and wQ are nil.", s.Stat())
break LOOP break LOOP
} }
...@@ -533,18 +515,6 @@ LOOP: ...@@ -533,18 +515,6 @@ LOOP:
} }
} }
case inPkg = <-s.rQ:
// read the s.rQ and assure (session)handlePackage gr will not block by (session)rQ.
if flag {
log.Debugf("%#v <-s.rQ", inPkg)
pkg := inPkg
// go s.listener.OnMessage(s, pkg)
s.listener.OnMessage(s, pkg)
s.incReadPkgNum()
} else {
log.Infof("[session.handleLoop] drop readin package{%#v}", inPkg)
}
case outPkg = <-s.wQ: case outPkg = <-s.wQ:
if flag { if flag {
if err = s.writer.Write(s, outPkg); err != nil { if err = s.writer.Write(s, outPkg); err != nil {
...@@ -572,11 +542,15 @@ LOOP: ...@@ -572,11 +542,15 @@ LOOP:
} }
func (s *session) addTask(pkg interface{}) { func (s *session) addTask(pkg interface{}) {
f := func() {
s.listener.OnMessage(s, pkg)
s.incReadPkgNum()
}
if s.tPool != nil { if s.tPool != nil {
s.tPool.AddTask(task{session: s, pkg: pkg}) s.tPool.AddTask(task{session: s, pkg: pkg})
} else { return
s.rQ <- pkg
} }
f()
} }
func (s *session) handlePackage() { func (s *session) handlePackage() {
...@@ -849,10 +823,6 @@ func (s *session) gc() { ...@@ -849,10 +823,6 @@ func (s *session) gc() {
close(s.wQ) close(s.wQ)
s.wQ = nil s.wQ = nil
} }
if s.rQ != nil {
close(s.rQ)
s.rQ = nil
}
s.Connection.close((int)((int64)(s.wait))) s.Connection.close((int)((int64)(s.wait)))
} }
s.lock.Unlock() s.lock.Unlock()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment