内置与可选的 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;