内置与可选的 Handler
介绍
框架提供了一些 Netty Handler,开发者可以根据业务选择安装与配置。
Name | Description | Tags |
---|---|---|
CmdCacheHandler | 游戏对外服缓存。 | 默认内置 智能卸载 |
CmdCheckHandler | 路由是否存在检测。 | 默认内置 |
SocketCmdAccessAuthHandler | 路由访问验证。 | 默认内置 |
SocketIdleHandler | 心跳处理。 | 默认内置 |
SocketRequestBrokerHandler | 负责把游戏端的请求转发给 Broker(游戏网关)。 | 默认内置 |
SocketUserSessionHandler | 管理 UserSession。 | 默认内置 |
WebSocketVerifyHandler | WebSocket 连接前的 token 验证。 | 默认内置 智能卸载 |
HttpRealIpHandler | 获取玩家真实 ip,通常用在游戏服务器使用了 nginx 代理的场景。 | 按需添加 智能卸载 |
SimpleLoggerHandler | 触发异常、断开连接时打印 log 。 | 默认内置 可配置开关 |
Tags 说明
- 默认内置:默认已经配置到游戏对外服中。
- 智能卸载:已经使用过,但后续不会用到时,或者一开始就用不上时,会自动从 ChannelPipeline 中移除。
- 按需添加:默认没有配置到游戏对外服中,如有需要,开发者可按需添加到游戏对外服中。
- 可配置开关:提供了相关开关配置,根据配置决定是否生效。
获取玩家真实 ip
我们可以通过 HttpRealIpHandler 来获取玩家真实 ip,以下是游戏对外服扩展部分的代码。
public class MyExternalServer {
...
public ExternalServer createExternalServer(int externalPort) {
DefaultExternalServerBuilder builder = ...
builder.setting().setMicroBootstrapFlow(new WebSocketMicroBootstrapFlow() {
@Override
protected void httpHandler(PipelineContext context) {
super.httpHandler(context);
context.addLast("HttpRealIpHandler", new HttpRealIpHandler());
}
});
return builder.build();
}
}
nginx 相关配置
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection "Upgrade";
# 将客户端的 Host 和 IP 信息一并转发到对应节点
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host
tip
nginx 配置,由热心市民提供 贡献者:zzzzzZZZZZ
SimpleLoggerHandler
ExternalGlobalConfig.enableLoggerHandler = true;