Closed HAZYUHE closed 9 months ago
可以在 netty 或 nginx 中添加 SSL
// 游戏对外服数据协议
message ExternalMessage {
...
// 协议开关,用于一些协议级别的开关控制,比如 安全加密校验等。 : 0 不校验
int32 protocolSwitch = 2;
...
// 业务请求数据
bytes data = 6;
...
}
ExternalMessage 给开发者预留了一个 protocolSwitch 属性,开发者可根据该属性自定义加密内容。
通常来说我们只需要对业务数据(即 data 属性)做处理,利用 protocolSwitch 属性与 data 配合。
具体的加密规则团队内部协商,比如,当路由是单数时用什么、双数时用什么;又或者说当主路由为 5~10 时用什么,大于 20 时用什么;得到规则后,就是对 data 字节数组的操作了。
对于业务数据加解密这部分,可以在游戏对外服编解码部分完成。
这一部分在框架内,该如何修改。
自定义一个编解码后,添加到 netty pipeline 中。
具体可参考游戏对外服相关文档
部分参考
假设 YourWebSocketExternalCodec 是你自定义的编解码。
public class Example {
ExternalServer createExternalServer() {
// 游戏对外服 - 构建器
DefaultExternalServerBuilder builder = ...
// setting:得到 ExternalCoreSetting 对象
DefaultExternalCoreSetting setting = builder.setting();
// 对 netty ChannelHandler 编排;重写 MicroBootstrapFlow 的 pipelineCodec 方法
setting.setMicroBootstrapFlow(new WebsocketMicroBootstrapFlow() {
@Override
public void pipelineCodec(PipelineContext context) {
// 添加 http 相关 handler
this.httpHandler(context);
// 建立连接前的验证 handler
this.verifyHandler(context);
// 添加 websocket 相关 handler
this.websocketHandler(context);
// websocket 编解码
context.addLast("codec", new YourWebSocketExternalCodec());
}
});
// 构建游戏对外服
return builder.build();
}
}
好的 感谢靓仔!!
你的问题 | 使用场景
描述你遇到的问题,或使用场景(询问框架能否满足此类需求) 我的需求就是需要对接口数据 加密加压缩,框架是已经用protobuf做了数据压缩,在这个基础上需要如何处理才能实现数据加密+压缩
预期值
期望的预期值
实际值
实际值