java 游戏服务器框架 ioGame 17.1.54 nginx 代理 webSocket 获取真实ip
[#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();
}
}