Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7bfbca8

Browse files
committed
在线人数 bugfix
1 parent 6379a26 commit 7bfbca8

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

src/http/controller/websocket.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package controller
88

99
import (
1010
"logic"
11-
"sync"
11+
"sync/atomic"
1212
"time"
1313

1414
"github.com/labstack/echo"
@@ -20,8 +20,7 @@ import (
2020
)
2121

2222
type WebsocketController struct {
23-
ServerId int
24-
mutex sync.Mutex
23+
ServerId uint32
2524
}
2625

2726
func (this *WebsocketController) RegisterRoute(g *echo.Group) {
@@ -33,10 +32,7 @@ func (this *WebsocketController) RegisterRoute(g *echo.Group) {
3332
func (this *WebsocketController) Ws(wsConn *websocket.Conn) {
3433
defer wsConn.Close()
3534

36-
this.mutex.Lock()
37-
this.ServerId++
38-
serverId := this.ServerId
39-
this.mutex.Unlock()
35+
serverId := int(atomic.AddUint32(&this.ServerId, 1))
4036

4137
isUid := true
4238
req := wsConn.Request()
@@ -74,6 +70,8 @@ func (this *WebsocketController) Ws(wsConn *websocket.Conn) {
7470
}
7571
// 用户退出时需要变更其他用户看到的在线用户数
7672
if !logic.Book.UserIsOnline(user) {
73+
logger.Infoln("user:", user, "had leave")
74+
7775
message := logic.NewMessage(logic.WsMsgOnline, map[string]int{"online": logic.Book.Len()})
7876
go logic.Book.BroadcastAllUsersMessage(message)
7977
}

src/logic/book.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const (
2727
WsMsgOnline // 发送在线用户数(和需要时也发历史最高)
2828
)
2929

30-
const MessageQueueLen = 1
30+
const MessageQueueLen = 10
3131

3232
type Message struct {
3333
Type int `json:"type"`
@@ -79,11 +79,13 @@ func (this *UserData) SendMessage(message *Message) {
7979
defer this.rwMutex.RUnlock()
8080

8181
for serverId, messageQueue := range this.serverMsgQueue {
82-
// 有可能用户已经退出,导致 messageQueue满,阻塞
82+
// 有可能用户已经退出,导致 messageQueue 满,阻塞
8383
if len(messageQueue) < MessageQueueLen {
8484
messageQueue <- message
8585
} else {
8686
logger.Infoln("server_id:", serverId, "had close")
87+
88+
delete(this.serverMsgQueue, serverId)
8789
}
8890
}
8991
}

0 commit comments

Comments
 (0)