fix: 修复因为goroutine导致ws无法正常发送数据的问题。

main v1.2.7
NoahLan 1 year ago
parent 96689a49b8
commit 379b4883a7

@ -38,22 +38,21 @@ func NewEngine(conf config.EngineConf, opts ...RunOption) *Engine {
router: rt.NewDefaultRouter(), router: rt.NewDefaultRouter(),
dieChan: make(chan struct{}), dieChan: make(chan struct{}),
connMgr: conn.NewConnManager(), connMgr: conn.NewConnManager(),
evtMgr: event.NewEventManager(),
sessIdMgr: session.NewSessionIDMgr(), sessIdMgr: session.NewSessionIDMgr(),
packerBuilder: func() packet.Packer { packerBuilder: func() packet.Packer {
return nil return nil
}, },
} }
if ngin.pool == nil {
ngin.pool, _ = ants.NewPool(math.MaxInt32)
}
ngin.evtMgr = event.NewEventManager(ngin.pool)
for _, opt := range opts { for _, opt := range opts {
opt(ngin) opt(ngin)
} }
if ngin.pool == nil {
ngin.pool, _ = ants.NewPool(math.MaxInt32)
}
return ngin return ngin
} }

@ -5,7 +5,6 @@ import (
"git.noahlan.cn/noahlan/nnet/conn" "git.noahlan.cn/noahlan/nnet/conn"
"git.noahlan.cn/noahlan/nnet/packet" "git.noahlan.cn/noahlan/nnet/packet"
"git.noahlan.cn/noahlan/ntool/nlog" "git.noahlan.cn/noahlan/ntool/nlog"
"github.com/panjf2000/ants/v2"
) )
var ErrEventTypeIllegal = errors.New("EventType illegal") var ErrEventTypeIllegal = errors.New("EventType illegal")
@ -65,8 +64,6 @@ type (
} }
eventManager struct { eventManager struct {
pool *ants.Pool
onConnected []OnConnectedFn onConnected []OnConnectedFn
onConnectError []OnConnectErrorFn onConnectError []OnConnectErrorFn
onDisconnected []OnDisconnectedFn onDisconnected []OnDisconnectedFn
@ -82,9 +79,8 @@ type (
///////////////// type-align ///////////////// type-align
var _ Event = (*eventManager)(nil) var _ Event = (*eventManager)(nil)
func NewEventManager(pool *ants.Pool) EventManager { func NewEventManager() EventManager {
return &eventManager{ return &eventManager{
pool: pool,
onConnected: make([]OnConnectedFn, 0), onConnected: make([]OnConnectedFn, 0),
onConnectError: make([]OnConnectErrorFn, 0), onConnectError: make([]OnConnectErrorFn, 0),
onDisconnected: make([]OnDisconnectedFn, 0), onDisconnected: make([]OnDisconnectedFn, 0),
@ -228,9 +224,7 @@ func (m *eventManager) OnConnected(nc *conn.Connection) {
return return
} }
for _, fn := range m.onConnected { for _, fn := range m.onConnected {
_ = m.pool.Submit(func() {
fn(nc) fn(nc)
})
} }
} }
@ -239,9 +233,7 @@ func (m *eventManager) OnConnectError(err error) {
return return
} }
for _, fn := range m.onConnectError { for _, fn := range m.onConnectError {
_ = m.pool.Submit(func() {
fn(err) fn(err)
})
} }
} }
@ -250,9 +242,7 @@ func (m *eventManager) OnDisconnected(nc *conn.Connection, err error) {
return return
} }
for _, fn := range m.onDisconnected { for _, fn := range m.onDisconnected {
_ = m.pool.Submit(func() {
fn(nc, err) fn(nc, err)
})
} }
} }
@ -261,9 +251,7 @@ func (m *eventManager) OnClose(nc *conn.Connection) {
return return
} }
for _, fn := range m.onClose { for _, fn := range m.onClose {
_ = m.pool.Submit(func() {
fn(nc) fn(nc)
})
} }
} }
@ -272,9 +260,7 @@ func (m *eventManager) OnSend(nc *conn.Connection, v any) {
return return
} }
for _, fn := range m.onSend { for _, fn := range m.onSend {
_ = m.pool.Submit(func() {
fn(nc, v) fn(nc, v)
})
} }
} }
@ -283,9 +269,7 @@ func (m *eventManager) OnSendError(nc *conn.Connection, v any, err error) {
return return
} }
for _, fn := range m.onSendError { for _, fn := range m.onSendError {
_ = m.pool.Submit(func() {
fn(nc, v, err) fn(nc, v, err)
})
} }
} }
@ -294,9 +278,7 @@ func (m *eventManager) OnReceive(nc *conn.Connection, p packet.IPacket) {
return return
} }
for _, fn := range m.onReceive { for _, fn := range m.onReceive {
_ = m.pool.Submit(func() {
fn(nc, p) fn(nc, p)
})
} }
} }
@ -305,8 +287,6 @@ func (m *eventManager) OnReceiveError(nc *conn.Connection, err error) {
return return
} }
for _, fn := range m.onReceiveError { for _, fn := range m.onReceiveError {
_ = m.pool.Submit(func() {
fn(nc, err) fn(nc, err)
})
} }
} }

@ -29,6 +29,7 @@ func WithHeartbeat(interval time.Duration, hbdFn func(conn *conn.Connection) []b
} }
var startFn event.OnConnectedFn = func(nc *conn.Connection) { var startFn event.OnConnectedFn = func(nc *conn.Connection) {
go func() {
ticker := time.NewTicker(m.interval) ticker := time.NewTicker(m.interval)
defer func() { defer func() {
@ -50,6 +51,7 @@ func WithHeartbeat(interval time.Duration, hbdFn func(conn *conn.Connection) []b
} }
} }
} }
}()
} }
return func(ngin *nnet.Engine) { return func(ngin *nnet.Engine) {

@ -32,12 +32,12 @@ func WithHeartbeatWS(interval time.Duration, hbdFn WsHeartbeatFn) nnet.RunOption
} }
var startFn event.OnConnectedFn = func(nc *conn.Connection) { var startFn event.OnConnectedFn = func(nc *conn.Connection) {
go func() {
ticker := time.NewTicker(m.interval) ticker := time.NewTicker(m.interval)
defer func() { defer func() {
ticker.Stop() ticker.Stop()
}() }()
for { for {
select { select {
case <-ticker.C: case <-ticker.C:
@ -58,6 +58,7 @@ func WithHeartbeatWS(interval time.Duration, hbdFn WsHeartbeatFn) nnet.RunOption
} }
} }
} }
}()
} }
return func(ngin *nnet.Engine) { return func(ngin *nnet.Engine) {

Loading…
Cancel
Save