@@ -25,6 +25,8 @@ const (
25
25
WsMsgOnline // 发送在线用户数(和需要时也发历史最高)
26
26
)
27
27
28
+ const MessageQueueLen = 1
29
+
28
30
type Message struct {
29
31
Type int `json:"type"`
30
32
Body interface {} `json:"body"`
@@ -67,15 +69,20 @@ func (this *UserData) Remove(serverId int) {
67
69
func (this * UserData ) InitMessageQueue (serverId int ) {
68
70
this .rwMutex .Lock ()
69
71
defer this .rwMutex .Unlock ()
70
- this .serverMsgQueue [serverId ] = make (chan * Message , 4 )
72
+ this .serverMsgQueue [serverId ] = make (chan * Message , MessageQueueLen )
71
73
}
72
74
73
75
func (this * UserData ) SendMessage (message * Message ) {
74
76
this .rwMutex .RLock ()
75
77
defer this .rwMutex .RUnlock ()
76
78
77
- for _ , messageQueue := range this .serverMsgQueue {
78
- messageQueue <- message
79
+ for serverId , messageQueue := range this .serverMsgQueue {
80
+ // 有可能用户已经退出,导致 messageQueue满,阻塞
81
+ if len (messageQueue ) < MessageQueueLen {
82
+ messageQueue <- message
83
+ } else {
84
+ logger .Infoln ("server_id:" , serverId , "had close" )
85
+ }
79
86
}
80
87
}
81
88
@@ -100,7 +107,7 @@ func (this *book) AddUser(user, serverId int) *UserData {
100
107
userData .lastAccessTime = time .Now ()
101
108
} else {
102
109
userData = & UserData {
103
- serverMsgQueue : map [int ]chan * Message {serverId : make (chan * Message , 4 )},
110
+ serverMsgQueue : map [int ]chan * Message {serverId : make (chan * Message , MessageQueueLen )},
104
111
lastAccessTime : time .Now (),
105
112
}
106
113
this .users [user ] = userData
0 commit comments