From 61b4ef7a8c5f754c0ac3ffb680e2737599579927 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Fri, 1 Dec 2023 16:43:58 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=20README.md=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=AD=E5=AF=B9=E4=BA=8E=E5=88=86=E6=B5=81?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E9=83=A8=E5=88=86=E7=9A=84=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 40779bf..4cdb30d 100644 --- a/README.md +++ b/README.md @@ -90,27 +90,35 @@ func main() { > Websocket地址: ws://127.0.0.1:9999 ### 分流服务器 -分流服务器可以将客户端分流到不同的分组上,每个分组中为串行处理,不同分组之间并行处理。 +分流服务器可以将消息分流到不同的分组上,每个分组中为串行处理,不同分组之间并行处理。 ```go package main import "github.com/kercylan98/minotaur/server" func main() { - srv := server.New(server.NetworkWebsocket, - server.WithShunt(func(conn *server.Conn) string { - return conn.GetData("roomId").(string) - }), - ) + srv := server.New(server.NetworkWebsocket) + srv.RegConnectionOpenedEvent(func(srv *server.Server, conn *server.Conn) { + // 通过 user_id 进行分流,不同用户的消息将不会互相阻塞 + srv.UseShunt(conn, conn.Gata("user_id").(string)) + }) 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 { panic(err) } } ``` -> 该示例中假设各房间互不干涉,故通过`server.WithShunt`将连接通过`roomId`进行分组,提高并发处理能力。 +> 该示例中模拟了用户分流渠道在自身渠道和房间渠道切换的过程,通过`UseShunt`对连接分流渠道进行设置,提高并发处理能力。 ### 服务器死锁检测 `Minotaur`内置了服务器消息死锁检测功能,可通过`server.WithDeadlockDetect`进行开启。