fix: move group push work off topic loop
This commit is contained in:
+15
-3
@@ -650,6 +650,14 @@ func (t *Topic) runLocal(hub *Hub) {
|
||||
|
||||
// handleClientMsg is the top-level handler of messages received by the topic from sessions.
|
||||
func (t *Topic) handleClientMsg(msg *ClientComMessage) {
|
||||
kind := "other"
|
||||
if t.cat == types.TopicCatP2P {
|
||||
kind = "p2p"
|
||||
} else if t.cat == types.TopicCatGrp {
|
||||
kind = "group"
|
||||
}
|
||||
immetrics.ObserveTopicQueueWait(kind, msg.queuedAt)
|
||||
msg.queuedAt = time.Time{}
|
||||
if msg.TenantID.IsZero() {
|
||||
msg.TenantID = t.tenantID
|
||||
} else if msg.TenantID != t.tenantID {
|
||||
@@ -1464,9 +1472,13 @@ func (t *Topic) saveAndBroadcastMessage(msg *ClientComMessage, asUid types.Uid,
|
||||
publishRealtimeTopicMessage(t.name, data)
|
||||
immetrics.ObserveMessagePublishStage(kind, "realtime_fanout", fanoutStarted, nil)
|
||||
|
||||
// sendPush will update unread message count and send push notification.
|
||||
if pushRcpt := t.pushForData(asUid, data.Data, markedReadBySender); pushRcpt != nil {
|
||||
sendPush(pushRcpt)
|
||||
// Push preparation copies immutable topic state. Presence resolution, cluster
|
||||
// recipient partitioning and unread updates run outside the topic loop.
|
||||
pushStarted := time.Now()
|
||||
pushRcpt := t.pushForData(asUid, data.Data, markedReadBySender)
|
||||
immetrics.ObserveMessagePublishStage(kind, "push_prepare", pushStarted, nil)
|
||||
if pushRcpt != nil {
|
||||
dispatchPushAsync(pushRcpt, true)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user