iohao / ioGame

无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景; 通过 ioGame 你可以很容易的搭建出一个集群无中心节点、集群自动化、分布式的网络服务器;FXGL、Unity、UE、Cocos Creator、Godot、Netty、Protobuf、webSocket、tcp、socket;java Netty 游戏服务器框架;
http://game.iohao.com
GNU Affero General Public License v3.0
904 stars 201 forks source link

框架对外服 麻烦 出一个 字节 协议 说明 #179

Closed ReanRelay closed 1 year ago

ReanRelay commented 1 year ago

message ExternalMessage { // 请求命令类型: 0 心跳,1 业务 int32 cmdCode = 1; // 协议开关,用于一些协议级别的开关控制,比如 安全加密校验等。 : 0 不校验 int32 protocolSwitch = 2; // 业务路由(高16为主, 低16为子) int32 cmdMerge = 3; // 响应码: 0:成功, 其他为有错误 sint32 responseStatus = 4; // 验证信息(错误消息、异常消息),通常情况下 responseStatus == -1001 时, 会有值 string validMsg = 5; // 业务请求数据 bytes data = 6; // 消息标记号;由前端请求时设置,服务器响应时会携带上; int32 msgId = 7; }

并未说明 具体 字节数量, 具体通信协议 ,序列字节排序方式 文档只有死板 .proto 使用方法

对于不使用 .proto 的开发 极不友好, 本人 为了 搞懂 对外服通信 协议, 下载 示例demo 源码 花了 很多 时间 去调试 弄清楚,到现在没办法 才 来 issues

对于 本人 新手 而已 ,感觉 官方文档 搞了 太多 花花草草

chenmaochang commented 1 year ago

框架只是提供了protobuf的通信协议方式,如果感觉不合适可以更换熟悉的json 还是建议直接先按示例去用,如果你非要搞懂protobuf,可以看protobuf官方文档https://protobuf.dev/

iohao commented 1 year ago

message ExternalMessage { // 请求命令类型: 0 心跳,1 业务 int32 cmdCode = 1; // 协议开关,用于一些协议级别的开关控制,比如 安全加密校验等。 : 0 不校验 int32 protocolSwitch = 2; // 业务路由(高16为主, 低16为子) int32 cmdMerge = 3; // 响应码: 0:成功, 其他为有错误 sint32 responseStatus = 4; // 验证信息(错误消息、异常消息),通常情况下 responseStatus == -1001 时, 会有值 string validMsg = 5; // 业务请求数据 bytes data = 6; // 消息标记号;由前端请求时设置,服务器响应时会携带上; int32 msgId = 7; }

并未说明 具体 字节数量, 具体通信协议 ,序列字节排序方式 文档只有死板 .proto 使用方法

对于不使用 .proto 的开发 极不友好, 本人 为了 搞懂 对外服通信 协议, 下载 示例demo 源码 花了 很多 时间 去调试 弄清楚,到现在没办法 才 来 issues

对于 本人 新手 而已 ,感觉 官方文档 搞了 太多 花花草草

可以给个具体参考吗。

简单介绍文档中已经说明,框架适合人群需要实际编程经验一年以上的人员。且在文档中快速入门这小节中已经介绍过 .proto 了,可以把 .proto 理解成DTO、POJO、业务数据载体等。

并未说明 具体 字节数量, 具体通信协议 ,序列字节排序方式 文档只有死板 .proto 使用方法

如果你想了解这些,可以阅读 TcpExternalCodec、WebSocketExternalCodec 相关编解码,编解码是 netty 是基础知识之一。

对于不使用 .proto 的开发 极不友好, 本人 为了 搞懂 对外服通信 协议, 下载 示例demo 源码 花了 很多 时间 去调试 弄清楚,到现在没办法 才 来 issues

框架支持 .proto 和 json,如果学习 .proto 有难度的,可以尝试换成 json。另外,游戏对外服的协议主要是给游戏前端的哥们看的,目前还没有前端哥们看不懂的。

游戏对外服的协议并不复杂,目前为止总共就 7 个字段,你说花了很多时间,有可能是没把文档看完。学习新事物的大体方式有两种,分别是

ReanRelay commented 1 year ago

message ExternalMessage { // 请求命令类型: 0 心跳,1 业务 int32 cmdCode = 1; // 协议开关,用于一些协议级别的开关控制,比如 安全加密校验等。 : 0 不校验 int32 protocolSwitch = 2; // 业务路由(高16为主, 低16为子) int32 cmdMerge = 3; // 响应码: 0:成功, 其他为有错误 sint32 responseStatus = 4; // 验证信息(错误消息、异常消息),通常情况下 responseStatus == -1001 时, 会有值 string validMsg = 5; // 业务请求数据 bytes data = 6; // 消息标记号;由前端请求时设置,服务器响应时会携带上; int32 msgId = 7; } 并未说明 具体 字节数量, 具体通信协议 ,序列字节排序方式 文档只有死板 .proto 使用方法 对于不使用 .proto 的开发 极不友好, 本人 为了 搞懂 对外服通信 协议, 下载 示例demo 源码 花了 很多 时间 去调试 弄清楚,到现在没办法 才 来 issues 对于 本人 新手 而已 ,感觉 官方文档 搞了 太多 花花草草

可以给个具体参考吗。

简单介绍文档中已经说明,框架适合人群需要实际编程经验一年以上的人员。且在文档中快速入门这小节中已经介绍过 .proto 了,可以把 .proto 理解成DTO、POJO、业务数据载体等。

并未说明 具体 字节数量, 具体通信协议 ,序列字节排序方式 文档只有死板 .proto 使用方法

如果你想了解这些,可以阅读 TcpExternalCodec、WebSocketExternalCodec 相关编解码,编解码是 netty 是基础知识之一。

对于不使用 .proto 的开发 极不友好, 本人 为了 搞懂 对外服通信 协议, 下载 示例demo 源码 花了 很多 时间 去调试 弄清楚,到现在没办法 才 来 issues

框架支持 .proto 和 json,如果学习 .proto 有难度的,可以尝试换成 json。另外,游戏对外服的协议主要是给游戏前端的哥们看的,目前还没有前端哥们看不懂的。

游戏对外服的协议并不复杂,目前为止总共就 7 个字段,你说花了很多时间,有可能是没把文档看完。学习新事物的大体方式有两种,分别是

  • 横向学习法。横向的特点是:一个知识点弄不明白,跳到下一个知识点,直到全部学完后回头再看。
  • 纵向学习法。纵向的特点是:一个知识点弄不明白就死磕,这种方式有可能会浪费很多时间。

不是搞不懂 .proto , 是.proto 使用不方便, 代码重复多 ,我虽然没用,据了解每次好像 要 转换, 如果自己写 一套 读写 1 、 2、 4、 8 、 字节 与 字符串 的方法 ,两边 相互配合 , 如果 维护 啥的, 服务端 与 客户端 代码 修改 一下就行了, 你这个 依赖 .procol 转换 是一种很不 友好的方案

iohao commented 1 year ago

message ExternalMessage { // 请求命令类型: 0 心跳,1 业务 int32 cmdCode = 1; // 协议开关,用于一些协议级别的开关控制,比如 安全加密校验等。 : 0 不校验 int32 protocolSwitch = 2; // 业务路由(高16为主, 低16为子) int32 cmdMerge = 3; // 响应码: 0:成功, 其他为有错误 sint32 responseStatus = 4; // 验证信息(错误消息、异常消息),通常情况下 responseStatus == -1001 时, 会有值 string validMsg = 5; // 业务请求数据 bytes data = 6; // 消息标记号;由前端请求时设置,服务器响应时会携带上; int32 msgId = 7; } 并未说明 具体 字节数量, 具体通信协议 ,序列字节排序方式 文档只有死板 .proto 使用方法 对于不使用 .proto 的开发 极不友好, 本人 为了 搞懂 对外服通信 协议, 下载 示例demo 源码 花了 很多 时间 去调试 弄清楚,到现在没办法 才 来 issues 对于 本人 新手 而已 ,感觉 官方文档 搞了 太多 花花草草

可以给个具体参考吗。 在简单介绍文档中已经说明,框架适合人群需要实际编程经验一年以上的人员。且在文档中快速入门这小节中已经介绍过 .proto 了,可以把 .proto 理解成DTO、POJO、业务数据载体等。 并未说明 具体 字节数量, 具体通信协议 ,序列字节排序方式 文档只有死板 .proto 使用方法 如果你想了解这些,可以阅读 TcpExternalCodec、WebSocketExternalCodec 相关编解码,编解码是 netty 是基础知识之一。 对于不使用 .proto 的开发 极不友好, 本人 为了 搞懂 对外服通信 协议, 下载 示例demo 源码 花了 很多 时间 去调试 弄清楚,到现在没办法 才 来 issues 框架支持 .proto 和 json,如果学习 .proto 有难度的,可以尝试换成 json。另外,游戏对外服的协议主要是给游戏前端的哥们看的,目前还没有前端哥们看不懂的。 游戏对外服的协议并不复杂,目前为止总共就 7 个字段,你说花了很多时间,有可能是没把文档看完。学习新事物的大体方式有两种,分别是

  • 横向学习法。横向的特点是:一个知识点弄不明白,跳到下一个知识点,直到全部学完后回头再看。
  • 纵向学习法。纵向的特点是:一个知识点弄不明白就死磕,这种方式有可能会浪费很多时间。

不是搞不懂 .proto , 是.proto 使用不方便, 代码重复多 ,我虽然没用,据了解每次好像 要 转换, 如果自己写 一套 读写 1 、 2、 4、 8 、 字节 与 字符串 的方法 ,两边 相互配合 , 如果 维护 啥的, 服务端 与 客户端 代码 修改 一下就行了, 你这个 依赖 .procol 转换 是一种很不 友好的方案

上面已经说过了,编解码是 netty 是基础知识之一,如果你不想使用 .proto ,在有能力的情况下可以自己定制一个编解码器。ioGame 是支持扩展的,请阅读游戏对外服设计篇相关文档。