docs: 更新 README.md 文件中对于分流服务器部分的说明

This commit is contained in:
kercylan98 2023-12-01 16:43:58 +08:00
parent dc557a06d4
commit 61b4ef7a8c
1 changed files with 16 additions and 8 deletions

View File

@ -90,27 +90,35 @@ func main() {
> Websocket地址: ws://127.0.0.1:9999 > Websocket地址: ws://127.0.0.1:9999
### 分流服务器 ### 分流服务器
分流服务器可以将客户端分流到不同的分组上,每个分组中为串行处理,不同分组之间并行处理。 分流服务器可以将消息分流到不同的分组上,每个分组中为串行处理,不同分组之间并行处理。
```go ```go
package main package main
import "github.com/kercylan98/minotaur/server" import "github.com/kercylan98/minotaur/server"
func main() { func main() {
srv := server.New(server.NetworkWebsocket, srv := server.New(server.NetworkWebsocket)
server.WithShunt(func(conn *server.Conn) string { srv.RegConnectionOpenedEvent(func(srv *server.Server, conn *server.Conn) {
return conn.GetData("roomId").(string) // 通过 user_id 进行分流,不同用户的消息将不会互相阻塞
}), srv.UseShunt(conn, conn.Gata("user_id").(string))
) })
srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) { srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) {
conn.Write(packet) var roomId = "default"
switch string(packet) {
case "JoinRoom":
// 将用户所处的分流渠道切换到 roomId 渠道,此刻同一分流渠道的消息将会按队列顺序处理
srv.UseShunt(conn, roomId)
case "LeaveRoom":
// 将用户所处分流切换为用户自身的分流渠道
srv.UseShunt(conn, conn.Gata("user_id").(string))
}
}) })
if err := srv.Run(":9999"); err != nil { if err := srv.Run(":9999"); err != nil {
panic(err) panic(err)
} }
} }
``` ```
> 该示例中假设各房间互不干涉,故通过`server.WithShunt`将连接通过`roomId`进行分组,提高并发处理能力。 > 该示例中模拟了用户分流渠道在自身渠道和房间渠道切换的过程,通过`UseShunt`对连接分流渠道进行设置,提高并发处理能力。
### 服务器死锁检测 ### 服务器死锁检测
`Minotaur`内置了服务器消息死锁检测功能,可通过`server.WithDeadlockDetect`进行开启。 `Minotaur`内置了服务器消息死锁检测功能,可通过`server.WithDeadlockDetect`进行开启。