File tree Expand file tree Collapse file tree 2 files changed +9
-9
lines changed Expand file tree Collapse file tree 2 files changed +9
-9
lines changed Original file line number Diff line number Diff line change @@ -8,7 +8,7 @@ package controller
8
8
9
9
import (
10
10
"logic"
11
- "sync"
11
+ "sync/atomic "
12
12
"time"
13
13
14
14
"github.com/labstack/echo"
@@ -20,8 +20,7 @@ import (
20
20
)
21
21
22
22
type WebsocketController struct {
23
- ServerId int
24
- mutex sync.Mutex
23
+ ServerId uint32
25
24
}
26
25
27
26
func (this * WebsocketController ) RegisterRoute (g * echo.Group ) {
@@ -33,10 +32,7 @@ func (this *WebsocketController) RegisterRoute(g *echo.Group) {
33
32
func (this * WebsocketController ) Ws (wsConn * websocket.Conn ) {
34
33
defer wsConn .Close ()
35
34
36
- this .mutex .Lock ()
37
- this .ServerId ++
38
- serverId := this .ServerId
39
- this .mutex .Unlock ()
35
+ serverId := int (atomic .AddUint32 (& this .ServerId , 1 ))
40
36
41
37
isUid := true
42
38
req := wsConn .Request ()
@@ -74,6 +70,8 @@ func (this *WebsocketController) Ws(wsConn *websocket.Conn) {
74
70
}
75
71
// 用户退出时需要变更其他用户看到的在线用户数
76
72
if ! logic .Book .UserIsOnline (user ) {
73
+ logger .Infoln ("user:" , user , "had leave" )
74
+
77
75
message := logic .NewMessage (logic .WsMsgOnline , map [string ]int {"online" : logic .Book .Len ()})
78
76
go logic .Book .BroadcastAllUsersMessage (message )
79
77
}
Original file line number Diff line number Diff line change @@ -27,7 +27,7 @@ const (
27
27
WsMsgOnline // 发送在线用户数(和需要时也发历史最高)
28
28
)
29
29
30
- const MessageQueueLen = 1
30
+ const MessageQueueLen = 10
31
31
32
32
type Message struct {
33
33
Type int `json:"type"`
@@ -79,11 +79,13 @@ func (this *UserData) SendMessage(message *Message) {
79
79
defer this .rwMutex .RUnlock ()
80
80
81
81
for serverId , messageQueue := range this .serverMsgQueue {
82
- // 有可能用户已经退出,导致 messageQueue满 ,阻塞
82
+ // 有可能用户已经退出,导致 messageQueue 满 ,阻塞
83
83
if len (messageQueue ) < MessageQueueLen {
84
84
messageQueue <- message
85
85
} else {
86
86
logger .Infoln ("server_id:" , serverId , "had close" )
87
+
88
+ delete (this .serverMsgQueue , serverId )
87
89
}
88
90
}
89
91
}
You can’t perform that action at this time.
0 commit comments