探索 Golang 云原生游戏服务器开发,3 分钟快速理解 Nano 通信协议(内含记忆脑图)

简介: 探索 Golang 云原生游戏服务器开发,3 分钟快速理解 Nano 通信协议(内含记忆脑图)

nano 协议格式


两层编码


message

  • route/protobuf 压缩
  • 编码方式可自定义
  • 编码结果传递给 package

package

  • 握手过程
  • 心跳
  • 数据传输编码
  • 编码结果可以通过 tcpwebsocket 等协议传输


协议层


发包

  • Message>Protobuf/JSON Encoder>Nano Message Encoder>Nano Packet Encoder

解包

  • Nano Packet Decoder>Nano Message Decoder>Protobuf/JSON Decoder>Message


Nano Package


封装在面向连接的二进制流的通讯协议


控制包


应用层面的控制流程

  • 客户端和服务器的握手
  • 心跳
  • 服务器主动断开连接的通知


数据包


  • 客户端和服务器之间传输应用数据


nano 数据包格式


  • header
  • body 内容长度,3个byte的大端整数,因此最大的包长度为2^24个byte
  • 0x01 客户端到服务器的握手请求以及服务器到客户端的握手响应
  • 0x02 客户端到服务器的握手ack
  • 0x03 心跳包
  • 0x04 数据包
  • 0x05 服务器主动断开连接通知
  • 包的类型 type(1 byte)
  • 包的长度 length(3 bytes)
  • body
  • 二进制的传输内容
  • 数据内容 body(length bytes)


握手 Package


  • 握手请求
  • user 用户自定义部分
  • sys.version 客户端的版本号
  • sys.type 客户端的类型
  • 系统部分
  • 用户部分
  • 握手响应
  • 可选,用户自定义的握手数据
  • heartbeat 可选,心跳时间间隔(秒)
  • dict 可选,route 字段压缩的映射表
  • protos 可选,protobuf压缩的数据定义
  • 200 成功
  • 500 失败
  • 501 客户端版本号不符合
  • code
  • sys
  • user
  • 正常握手的流程
  • —> handshake request(client)
  • <— handshake response(server)
  • —> handshake ack(client)


心跳 Package


  • 心跳包的length字段为0,body为空
  • 心跳超时时间为2倍的心跳间隔时间
  • 心跳的流程
  • —> heartbeat Client
  • <— heartbeat(wait heartbeat interval)Sever
  • —> next heartbeat (wait heartbeat interval)Client


数据 Package


  • 客户端和服务器之间传输数据所用
  • body 部分是由上层传下来的任意二进制数据
  • package 层不会 对body内容做任何处理


服务器主动断开 Package


  • 如:踢掉某个在线玩家
  • 会先向客户端发送一个控制消息,然后再断开连接


Nano Message


主要作用是封装消息头


标志位(flag)


  • flag(1byte)它决定了后面的消息类型和内容的格式
  • preserved(4 bits)预留4位
  • message type(3 bits)范围为0~7
  • route(1 bit) 表示 route 是否压缩,影响 route 字段的长度
  • message id(0~5 bytes)varints 128变长编码,根据值的大小
  • route(0~256 bytes)根据消息类型以及内容的大小


消息类型(Message Type)


flag 字段的第 2-4 位来确定

  • request
  • ----000- | <message id> | <route>
  • notify
  • ----001- | <route>
  • response
  • ----010- | <message id>
  • push
  • ----011- | <route>


路由压缩标志(Route Compression Flag)


  • [-------0] (flag)
  • <length>1 byte | <utf8 string> (route)
  • [-------1] (flag)
  • <route code> (2 bytes)
相关文章
|
5月前
|
运维 Cloud Native 开发者
云原生技术演进:从微服务到无服务器的旅程
【8月更文挑战第20天】在数字化时代的浪潮中,云原生技术如同一艘航船,承载着企业转型的梦想与挑战。本文将深入探讨云原生技术的发展路径,从微服务的兴起到无服务器架构的革新,揭示这一技术演进背后的逻辑与动力。通过分析云原生技术的优势、面临的挑战以及未来的发展趋势,我们将描绘出一幅云原生技术演进的宏伟蓝图。
|
5月前
|
运维 Cloud Native 云计算
云原生架构的演进:从微服务到无服务器计算
在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性和成本效益性,成为推动现代软件开发和运维的关键力量。本文将探讨云原生概念的演变,特别是从微服务架构到无服务器计算的转变,揭示这一进化如何影响应用程序的开发、部署和管理。通过分析实际案例,我们旨在提供对云原生技术未来趋势的洞察,同时指出企业在这一转变过程中可能面临的挑战和机遇。
60 2
|
6月前
|
运维 Cloud Native 持续交付
云原生架构的演进:从微服务到无服务器计算
【7月更文挑战第28天】在数字化浪潮的推动下,云原生技术不断演进,引领着软件开发和运维模式的革新。本文将深入探讨云原生架构的发展历程,着重分析微服务架构与无服务器计算模型如何相互补充,共同推动现代应用的开发与部署。我们将从微服务的基本原则出发,探索其如何赋能团队快速迭代和扩展应用,进而阐述无服务器计算如何简化资源管理,降低运营成本。通过对比分析,揭示两者结合的优势,为读者提供构建未来云原生应用的洞见。
|
5月前
|
Cloud Native 安全 云计算
云原生技术的未来:探索服务网格和无服务器架构
随着企业数字化转型的深入,云计算已成为推动业务创新的核心力量。本文将深入探讨云原生技术的最新发展趋势,重点分析服务网格和无服务器架构如何重塑云计算的未来。通过实际案例和技术解析,揭示这些前沿技术如何解决现代应用部署的复杂性,提高系统的可伸缩性和弹性。文章旨在为读者提供云原生领域的深度见解,并激发对云技术未来发展的思考。
110 0
|
6月前
|
运维 Cloud Native 云计算
云原生架构的演进:从微服务到无服务器计算
【6月更文挑战第30天】 在数字化转型和技术创新的浪潮中,云原生技术以其灵活性、可扩展性和成本效益成为企业IT战略的核心。本文将探索云原生架构的关键概念,从早期的微服务架构到现代的无服务器计算模型,揭示这一演变如何推动企业更高效地开发、部署和管理应用程序。我们将深入讨论这些技术背后的原理,以及它们如何帮助企业实现敏捷性、弹性和自动化运维。
|
6月前
|
运维 Cloud Native 开发者
云原生架构的演进之路:从微服务到无服务器计算
在数字化转型的浪潮中,企业不断追求更高效、灵活的IT解决方案。云原生技术作为推动现代软件部署的关键力量,其发展经历了从微服务到无服务器计算的转变。本文将深入探讨这一演进过程,揭示它如何重塑应用开发与运维模式,并展望云原生技术的未来趋势。
|
6月前
|
运维 Kubernetes Cloud Native
云原生技术的未来演进:探索服务网格和无服务器架构的融合
随着企业数字化转型的不断深入,云原生技术已成为推动现代软件开发的关键力量。本文深入探讨了服务网格和无服务器架构这两大云原生技术趋势,分析了它们各自的优势以及未来可能的融合点。通过对比分析和案例研究,我们揭示了这两种技术如何互补并共同推进云原生生态系统的发展,同时指出了实践中面临的挑战和潜在的解决方案。 【7月更文挑战第22天】
103 0
|
Cloud Native 定位技术 图形学
《2022中国云游戏行业认知与观察》——前言
《2022中国云游戏行业认知与观察》——前言
143 0
|
存储 Cloud Native Android开发
《2022中国云游戏行业认知与观察》——第一章、了解云游戏——1.1 什么是云游戏?(上)
《2022中国云游戏行业认知与观察》——第一章、了解云游戏——1.1 什么是云游戏?(上)
269 0
|
Web App开发 边缘计算 编解码
《2022中国云游戏行业认知与观察》——第一章、了解云游戏——1.1 什么是云游戏?(中)
《2022中国云游戏行业认知与观察》——第一章、了解云游戏——1.1 什么是云游戏?(中)
201 0