首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

游戏开发 —— 协议设计

应用层 应用层主要是常用是解析方式定义和解析,主要选型,主要是看你基于什么需求了,适用于实际需求就好。 我们常用协议类型,主要有这两种:文本协议、二进制协议。...如常见http协议,一般常见http协议如下: 这种格式非常贴近我们文字描述,方便阅读,而且目前HTTP也是客户端浏览器或其他程序Web服务器之间应用层通信协议,适用非常广泛。...数据格式 以上我们看到了两种协议类型,但对于消息体解析介绍很少,消息体格式决定了语义和时序,格式不同数据序列化和反序列化也是不同。...一条消息数据,用protobuf序列化大小是json10分之一,xml格式20分之一,是二进制序列化10分之一 xml 不多解释了,大家都用有过,强烈建议使用这种,除了无效字符过多(标签),...比如游戏中要对寻路、战斗等公式计算,牵扯到浮点数了,有可能前后端算出不一致,以Arm为例,Arm浮点数就有软模拟、硬件IEEE-754兼容、SIMD下IEEE-754兼容三种情况。

2K01
您找到你想要的搜索结果了吗?
是的
没有找到

移动互联网IM之协议设计

、自主控制 | 要考虑可扩展、兼容性、序列化和反序列化、安全等问题 | 私有协议设计 基于TCP应用层协议一般都分为包头和包体(如HTTP),IM协议也例外。...所以常见做法是:定长二进制包头,可扩展变长包体,包体可以使用文本如Protobuf、MessagePack、JSON、XML等扩展性好协议。包头负责传输和解析效率,是所有包公共部分,业务无关。...包体保证扩展性,业务相关。...,由于二进制格式扩展性不好,如果要扩展字段,旧版协议就不兼容了,所以一般会有一个version字段用于区分版本; 4、type:消息类型,用来区分不同功能消息包,如密钥交换消息、心跳消息、业务消息、...自己加解密 自己实现加解密,重点在于密钥生成管理,密钥管理方式主要有这么两种: 1) 固定密钥     服务端和客户端约定好一个密钥,同时约定好一个对称加密算法如AES,每次客户端发送消息前,使用约定好算法和密钥对消息进行加密

3.9K81

关于 Java 对象序列化您不知道 5 件事

Hashtable 和 HashMap 在磁盘上格式是不相同、兼容。...除非对每个持久化用户设置运行某种类型数据转换实用程序(极其庞大任务),否则以后似乎只能一直用Hashtable 作为应用程序存储格式。...hash,该 hash 是根据给定源文件中几乎所有东西 — 方法名称、字段名称、字段类型、访问修改方法等 — 计算出来序列化将该 hash 值序列化流中 hash 值相比较。...为了使 Java 运行时相信两种类型实际上是一样,第二版和随后版本 Person 必须第一版有相同序列化版本 hash(存储为 private static final serialVersionUID...两者都是可序列化,所以将对象包装在 SealedObject 中可以围绕原对象创建一种 “包装盒”。必须有对称密钥才能解密,而且密钥必须单独管理。

63010

面试抽集二

8.HTTP/2 9.多版本兼容 JAR ActiveMQ执行流程 mq执行需要开启mq服务器 MQ就是我主线程可能要发送一个短信,但是这个短信不是自己程序,如果放到主程序里面,这个短信发送失败...: 1.可以选择抛出异常 2.抛出异常则必须遵从父类方法抛出异常(异常类型小于等于父类异常,因为在向上造型为父类类型时,调用此方法,会出现父类无法处理异常类型) 3.不可抛出新异常(原因同上...) 4.当子类方法同时重写了父类和接口中方法时,则不能抛出异常(除非接口和父类抛出异常一样,此时可抛出这类异常,原因同第2点一样) 什么是Java序列化,如何实现Java序列化 列化就是一种用来处理对象流机制...注入 基于注解注入 svngit区别 1.svn是集中式版本控制系统,git是分布式版本控制系统 2.svn是直接服务器进行交互,git是将文件存到本地然后再推送到服务器 3.svn必须在连网情况下工作...对称加密:【一个秘钥:文件加密和解密使用相同密钥,即加密密钥也可以用作解密密钥】 非对称加密:【两个密钥:公开密钥(publickey)和私有密钥,公有密钥加密,私有密钥解密】 发布者:全栈程序员栈长

42010

关于Java序列化你不知道

Hashtable 和 HashMap 在磁盘上格式是不相同、兼容。...除非对每个持久化用户设置运行某种类型数据转换实用程序(极其庞大任务),否则以后似乎只能一直用Hashtable 作为应用程序存储格式。...hash,该 hash 是根据给定源文件中几乎所有东西 — 方法名称、字段名称、字段类型、访问修改方法等 — 计算出来序列化将该 hash 值序列化流中 hash 值相比较。...为了使 Java 运行时相信两种类型实际上是一样,第二版和随后版本 Person 必须第一版有相同序列化版本 hash(存储为 private static final serialVersionUID...两者都是可序列化,所以将对象包装在 SealedObject 中可以围绕原对象创建一种“包装盒”。必须有对称密钥才能解密,而且密钥必须单独管理。

52520

Codable 自定义解析 JSON

这样做原因可能是每次启动应用程序时为用户提供整洁状态,或者是因为我们服务器不支持草稿。 幸运是,这也可以轻松完成,而不必更改NoteCollection实际Codable实现。...尽管拥有正确序列化代码很重要,但是拥有适合我们实际代码库模型结构也同样重要。 相反,让我们创建一个新专用类型——它将在JSON数据中使用格式Swift代码结构体之间架起一座桥梁。...,我们现在可以定义一个私有属性,该名称用于其数据JSON密钥相匹配——并使我们exchangeRates属性仅充当该私有属性面向公众代理: struct CurrencyConversion:...当我们想使我们Swift代码使用非常不同结构JSON API兼容时,上述技术可能是一个很好工具——且无需完全从头实现Codable。...转换值 在解码时,尤其是在使用我们无法控制外部JSON API进行解码时,一个非常常见问题是,以Swift严格类型系统兼容方式对类型进行编码。

1.9K20

安全规则

CA2300:请勿使用不安全序列化程序 BinaryFormatte 反序列化不受信任数据时,会对不安全序列化程序造成风险。...攻击者可能会修改序列化数据,使其包含非预期类型,进而注入具有不良副作用对象。...CA2361:请确保包含 DataSet.ReadXml() 自动生成类没有不受信任数据一起使用 对包含不受信任输入 DataSet 执行反序列化时,攻击者可能通过创建恶意输入实施拒绝服务攻击...较弱加密性会泄露应用程序服务器之间通信机密性,使攻击者更易于窃听敏感数据。...CA5391:在 ASP.NET Core MVC 控制器中使用防伪造令牌 处理 POST、PUT、PATCH 或 DELETE 请求而验证防伪造令牌可能易受到跨网站请求伪造攻击。

1.9K00

bip32(比特币改进协议)

它们等价事实是使非硬化密钥有用(可以在不知道任何私钥情况下导出给定父密钥子公钥),以及它们密钥区别。 总是使用非硬化键(更有用)原因是安全性; 后面可以了解更详细信息。...然而,N(m / aH)不能被重写为N(m)/ aH,因为后者是不可能。 树中每个叶节点对应于实际密钥,而内部节点对应于从它们分散密钥集合。...建议以base58格式表示此数据,因为它可能被解释为一种地址(并且钱包软件不需要接受对链密钥本身支付)。 标识符前32位称为密钥指纹。...兼容性 为符合本标准,客户端必须至少能够导入扩展公钥或私钥,才能将其直接后代作为钱包密钥访问。...然而,实现可能会因特定需求而偏离它; 更复杂应用程序可能需要更复杂树结构。

1.5K20

RSA加密算法原理

理论上,只要其钥匙长度n足够长,用RSA加密信息实际上是不能被解破。 RSA算法通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开。...为减少计算量,在传送信息时,常采用传统加密方法公开密钥加密方法相结合方式,即信息采用改进DES或IDEA密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。...不过E和N并不是随便什么数都可以,它们都是经过严格数学计算得出,关于E和N拥有什么样要求及其特性后面会讲到。E是加密(Encryption)首字母,N是数字(Number)首字母。...7、 byte[].toString() 返回实际上是内存地址,不是将数组实际内容转换为 String: Java 中数组 toString() 方法返回并非数组内容,它返回实际上是数组存储元素类型以及数组在内存位置一个标识...8、字符串用以保存文本信息,字节数组用以保存二进制数据: java.lang.String 保存明文,byte 数组保存二进制密文,在 java.lang.String 和 byte[] 之间不应该具备互相转换

8.5K30

Apache NiFi中JWT身份验证

JWT组成元素 JWT标准定义了令牌三个元素:header、payload和signature。每个元素使用Bas64编码字符串组成,以便HTTP头所需ASCII字符集相兼容。...RFC 7519 3.1节提供了一个JWT示例,其中包括每个元素编码和解码表示。 JWT Header 大多数JWT都包括一个带有签名算法header,该签名算法描述了加密密钥类型和哈希算法。...JSON Web签名标准定义了利用基于哈希消息验证码对称密钥算法,以及几种非对称密钥算法。两种类型加密密钥策略都依赖于SHA-2哈希算法,其输出大小可选,分别为256、384或512位。...在NiFi 1.10.0之前,H2数据库在初次登录后为每个用户保留相同UUID对称密钥。这种方法不支持任何类型JWT撤销,依赖于过期声明来使令牌撤销。...浏览器在重新启动时维护会话cookie,这避免了有效或陈旧令牌持久性相关问题。

3.9K20

代码质量规则

CA1016:用 AssemblyVersionAttribute 标记程序集 .NET 使用版本号来唯一标识程序集,并绑定到强名称程序集中类型。 版本号版本和发行者策略一起使用。...CA1416:验证平台兼容性 在组件上使用依赖于平台 API 会使代码无法用于所有平台。...CA1418:使用有效平台字符串 平台兼容性分析器需要有效平台名称和版本。 CA1501:避免过度继承 类型在继承层次结构中深度超过四级。 深度嵌套类型层次结构可能很难遵循、理解和维护。...对于尝试获取对具有弱标识对象线程,该线程可能会被其他应用程序域中持有对同一对象另一线程所阻止。 CA2007:直接等待任务 异步方法会直接等待 Task。...较弱加密性会泄露应用程序服务器之间通信机密性,使攻击者更易于窃听敏感数据。

2.1K30

SSH 密钥类型及格式

SSH 密钥类型# 根据上文描述, SSH 密钥几种类型特点及使用场景如下表: 类型 描述 场景 rsa1 对应于SSH协议版本1RSA算法。...这是一种基于大数因子分解难题算法,RSA是一个被广泛使用公钥加密系统。 当使用SSH协议版本1时,可以选择此类型。但是需要注意,SSH协议版本1已被视为不安全,因此推荐使用。...在可预见未来,RSA算法可能会变得实际可破解。所有SSH客户端都支持此算法。 当需要与所有SSH客户端兼容时可以选择此类型。但是需要注意,随着技术进步,此类型安全性可能会降低。...推荐在新场景中使用此类型,因为其已经被认为过时。 ecdsa 对应于SSH协议版本2ECDSA算法。ECDSA是一种使用椭圆曲线新型数字签名算法。...这是SSH2公钥格式,它被许多SSH实现所使用,包括OpenSSH。 当需要与SSH2兼容或与其他使用该格式系统进行交互时,可以选择此格式。

1K40

Proguard 常用规则

排除名称进一步尝试匹配后续名称。 因此,如果名称过滤器中某个项目相匹配,则会立即接受或拒绝该项目,具体取决于项目是否具有否定符。 如果名称项目匹配,则会针对下一个项目进行测试,依此类推。...例如,你可能希望保留实现 Serializable 接口所有类名,以便处理后代码任何原始序列化类保持兼容。 完全不用类仍然可以删除。只有在混淆时才适用。...然后ProGuard确保一些功能与Android兼容。 例如,如果您正在处理Android应用程序,则应该指定此选项。 一般规则 -verbose 指定在处理期间写出更多信息。...在保留方法名称时,这通常很有用,以确保方法参数类型不会重命名。他们签名保持完全不变,并与本地库兼容。...为了获得更多灵活性,类名实际上可以是逗号分隔类名列表,可以加!。这个符号看起来不是很像java,所以应该适度使用。 为了方便和向后兼容,类名*指任何类,而不考虑它包。

1.6K20

ruoyi-vue版本(二十七)UUID 随机数相关文件解析

这个版本号用于验证序列化对象序列化 类定义是否兼容。...如果在序列化和反序列化过程中, 对象版本号类定义版本号匹配,就会抛出 InvalidClassException 异常,导致序列化或反序列化失败。...通过显式指定版本号,我们可以确保即使类定义发生了一些 改变(例如添加或删除字段或方法),仍然可以进行正确序列化和 反序列化操作。 这个字段值可以是任何 long 类型数字。...通常情况下,我们会使 用固定值,以确保在类定义发生变化时,版本号保持一致,从而避 免序列化和反序列化兼容性问题。...总而言之,private static final long serialVersionUID 作 用是提供类序列化版本控制,以确保序列化和反序列化兼容性 ,并防止在类定义发生变化时出现错误。

52810

应用层安全层传输层如何进行协议选型?

,以及序列号反序列化细节 无论如何,了解协议设计原则,对深入理解系统通信非常有帮助。...实际栗子 下面来看一个im协议实际例子 ,一般常见做法是:定长二进制包头,可扩展变长包体。 包体可以使用用文本、XML等扩展性好协议。 包头负责传输和解析效率,业务无关。...2、自行加解密 自己来搞加解密,核心在于密钥生成管理,密钥管理方式有多种,主要有这么三种: (1)固定密钥 服务端和客户端约定好一个密钥,同时约定好一个加密算法(eg:AES ),每次客户端im在发送前...这种方式,密钥和算法对程序员都是透明。...密钥协商过程要经过2次非对称密钥随机生成,1次对称加密密钥随机生成,具体详情这里展开,有兴趣同学可以看下SSL密钥协商额过程。

1.3K50

Apple无线生态系统安全性指南

后者值是一个序列化对象,其中包含在钥匙串中定位特定项目所需所有信息。...假设状态A是早期协议版本一部分,并且苹果保留了它以便于向后兼容但开始加密包含更多敏感信息(活动类型新字段。...该值包含TLV8结构,这些结构对用于密钥交换各个字段进行编码。 OPACK是专有的未记录序列化格式,将其规范示例实现一起发布在Python中。...该帧由服务类型和帧类型组成,后面是实际有效负载。对于特定服务,服务类型是恒定。例如,PWS使用服务类型0x07。帧类型用于区分同一服务不同帧。...帧格式遵循HO / UC相同基本结构,但使用单独类型。上图显示了TLV8类型为0x0fPWS广播帧格式。

66831

CA2352:可序列化类型不安全 DataSet 或 DataTable 容易受到远程代码执行攻击

此规则查找反序列化时不安全类型。 如果代码没有反序列化找到类型,则没有反序列化漏洞。 有关详细信息,请参阅 DataSet 和 DataTable 安全指南。...使序列化数据免被篡改。 序列化后,对序列化数据进行加密签名。 在反序列化之前,验证加密签名。 保护加密密钥不被泄露,并设计密钥轮换。...何时禁止显示警告 在以下情况下,禁止显示此规则警告是安全: 此规则找到类型永远不会被直接或间接反序列化。 已知输入为受信任输入。 考虑应用程序信任边界和数据流可能会随时间发生变化。...CA2351:确保 DataSet.ReadXml() 输入受信任 CA2353:可序列化类型不安全 DataSet 或 DataTable CA2354:反序列化对象图中不安全 DataSet...DataTable CA2361:请确保包含 DataSet.ReadXml() 自动生成类没有不受信任数据一起使用 CA2362:自动生成序列化类型中不安全数据集或数据表易受远程代码执行攻击

35100

CA2350:确保 DataTable.ReadXml() 输入受信任

使序列化数据免被篡改。 序列化后,对序列化数据进行加密签名。 在反序列化之前,验证加密签名。 保护加密密钥不被泄露,并设计密钥轮换。...何时禁止显示警告 在以下情况下,禁止显示此规则警告是安全: 已知输入受到信任。 考虑到应用程序信任边界和数据流可能会随时间发生变化。 已采取了如何修复冲突某项预防措施。...CA2352:可序列化类型不安全 DataSet 或 DataTable 容易受到远程代码执行攻击 CA2353:可序列化类型不安全 DataSet 或 DataTable CA2354:反序列化对象图中不安全...DataSet 或 DataTable 可能容易受到远程代码执行攻击 CA2355:反序列化对象图中不安全 DataSet 或 DataTable CA2356:Web 反序列化对象图中不安全 DataSet...或 DataTable CA2361:请确保包含 DataSet.ReadXml() 自动生成类没有不受信任数据一起使用 CA2362:自动生成序列化类型中不安全数据集或数据表易受远程代码执行攻击

32400
领券