Skip to content

java 游戏服务器框架 ioGame 17.1.54 nginx 代理 webSocket 获取真实ip

Compare
Choose a tag to compare
@iohao iohao released this 18 Aug 02:24
· 307 commits to main since this release

[#174] fix action 交给容器管理时,实例化两次的问题

获取游戏对外服的数据与扩展,获取ResponseCollectExternalMessage 新增 optionalAnySuccess 方法,方便得到成功的 optional

    public String getUserIp() {

        ResponseCollectExternalMessage message = ...

        return message
                .optionalAnySuccess()
                // 得到返回值
                .map(ResponseCollectExternalItemMessage::getData)
                // 将为 String
                .map(Objects::toString)
                // 如果没获取到给个空串,调用方就不需要做 null 判断了。
                .orElse("");
    }

压测&模拟客户端请求模块,新增模块名标识

public class BagInputCommandRegion extends AbstractInputCommandRegion {
    @Override
    public void initInputCommand() {
        this.inputCommandCreate.cmd = BagCmd.cmd;
        this.inputCommandCreate.cmdName = "背包模块";
    }
}

新游戏对外服新增 HttpRealIpHandler,用于获取玩家真实 ip 支持

游戏对外服 webSocket 使用 nginx 代理,也能获取真实的玩家 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);
                /*
                 * HttpRealIpHandler 是框架内置的一个 handler。
                 * 添加上后,即使是通过 nginx 转发,也可以得到玩家真实的 ip
                 */
                context.addLast("HttpRealIpHandler", new HttpRealIpHandler());
            }
        });

        // 构建游戏对外服 https://www.yuque.com/iohao/game/ea6geg
        return builder.build();
    }
}