chore[doc]: update doc

This commit is contained in:
godotg committed 2024-03-23 18:20:08 +08:00
1 parent 5c1bc4d143
commit 0e6fb0addd
3 files changed
+6 -6

No files matched your search

@@ -78,7 +78,7 @@ public class GatewayRouteHandler extends ServerRouteHandler {
}
// 把客户端信息包装为一个GatewayAttachment,因此通过这个网关附加包可以得到玩家的uid、sid之类的信息
// 把客户端信息包装为一个GatewayAttachment,因此通过这个网关附加包可以得到用户或玩家的uid、sid之类的信息
var gatewayAttachment = new GatewayAttachment(session);
var signalAttachment = (SignalAttachment) decodedPacketInfo.getAttachment();
if (signalAttachment != null) {
@@ -87,7 +87,7 @@ public class GatewayRouteHandler extends ServerRouteHandler {
}
// 网关优先使用IGatewayLoadBalancer作为一致性hash的计算参数,然后才会使用客户端的session做参数
// 例子:以聊天服务来说,玩家知道自己在哪个群组groupId中,那往这个群发送消息时,会在Packet中带上这个groupId做为一致性hash就可以了。
// 例子:以聊天服务来说,用户或玩家知道自己在哪个群组groupId中,那往这个群发送消息时,会在Packet中带上这个groupId做为一致性hash就可以了。
if (packet instanceof IGatewayLoadBalancer) {
var loadBalancerConsistentHashObject = ((IGatewayLoadBalancer) packet).loadBalancerConsistentHashObject();
gatewayAttachment.setTaskExecutorHash(loadBalancerConsistentHashObject.hashCode());
@@ -103,7 +103,7 @@ public class GatewayRouteHandler extends ServerRouteHandler {
}
// 再使用session的sid做一致性hash,因为每次客户端连接过来sid都会改变,所以客户端重新建立连接的话可能会被路由到其它的服务器
// 如果有特殊需求的话,可以考虑去重写网关的转发策略
// 拿着玩家的sid做一致性hash,那肯定是:一旦重连sid就会一直变化。所以:一般情况下除非自己创建TcpClient,否则逻辑不应该走到这里。 而是走上面的通过UID做一致性hash
// 拿着用户或玩家的sid做一致性hash,那肯定是:一旦重连sid就会一直变化。所以:一般情况下除非自己创建TcpClient,否则逻辑不应该走到这里。 而是走上面的通过UID做一致性hash
var sid = session.getSid();
forwardingPacket(packet, gatewayAttachment, sid);
}
@@ -125,7 +125,7 @@ public class Router implements IRouter {
gatewayAttachment.setClient(false);
dispatchByTaskExecutorHash(gatewayAttachment.taskExecutorHash(), task);
} else {
// 这里是:别的服务提供者提供授权给网关,比如:在玩家登录后,home服查到了玩家uid,然后发给Gateway服
// 这里是:别的服务提供者提供授权给网关,比如:在用户或玩家登录后,home服查到了玩家uid,然后发给Gateway服
var gatewaySession = NetContext.getSessionManager().getServerSession(gatewayAttachment.getSid());
if (gatewaySession == null) {
logger.error("gateway receives packet:[{}] and attachment:[{}] from server" + ", but serverSessionMap has no session[id:{}], perhaps client disconnected from gateway.", JsonUtils.object2String(packet), JsonUtils.object2String(attachment), gatewayAttachment.getSid());
@@ -159,7 +159,7 @@ public class Router implements IRouter {
* 在zfoo这套线程模型中,保证了服务器所接收到的Packet(最终被包装成PacketReceiverTask任务),永远只会在同一条线程处理,
* TaskBus通过AbstractTaskDispatch去派发PacketReceiverTask任务,具体在哪个线程处理通过IAttachment的taskExecutorHash计算。
* <p>
* 这种流水线做法对cpu缓存非常友好,java线程能大部分时间跑在一个cpu核心,而玩家又和线程一一对应,这样就可以最大限度提高cpu缓存命中率。
* 这种流水线做法对cpu缓存非常友好,java线程能大部分时间跑在一个cpu核心,而用户逻辑又和线程一一对应,这样就可以最大限度提高cpu缓存命中率。
* cpu的cache越大命中率就越高,性能提高就越明显。
* <p>
* 单线程热点问题,在负载足够大的情况下,比如5000人同时在线的8核服务器,因为样本足够大每个核心分配的人数差距并不会太大。