Golang实践经验和教训( 三 )
序列号和重置
探测组件交换数据包并依靠序列号进行数据包处理 。 旨在避免处理分组重复或乱序分组 。 HALO的第一个实现依靠特殊的序列号0来重置序列号 。 这样的数字仅在组件初始化期间使用 。 主要问题是考虑一个始终从0开始的递增序列号值 , 组件重新启动后 , 可能会发生数据包重新排序 , 并且数据包可以轻松地用重置之前使用的值替换序列号 。 这样随后的数据包将被忽略 , 直接复位之前使用的序列号 。
UDP握手和有限状态机
有一个问题是组件重新启动后序列号是否正确一致 。 有几种方法可以解决此问题 , 在讨论了可能的选项之后 , HALO选择实现带有清晰状态定义的三向握手协议 。 该握手在初始化期间通过链接建立会话 。 这样可以确保节点通过同一会话进行通信并为其使用适当的序列号 。 为了正确实现这一点 , 必须定义一个具有清晰状态和过渡的有限状态机 , 这样就能够正确管理所有握手形成的极端情况 。
会话ID由握手初始化程序生成 。 完整的交换顺序如下:
推荐阅读
- 原神|原神:不要专门跑去抽4星,以前的教训,让人印象深刻
- 手机游戏|于月仙事件的惨痛教训:不要雇佣一个“手游上瘾”的人!
- edg战队|FPX战胜EDG打出3个名场面,圣枪哥装杯被新人教训,Viper化身院长
- RNG|没有吸取DK的教训?RNG差点“翻车”,米勒说出心里话
- 梦幻西游|梦幻西游:男子沉迷于游戏,半年亏掉30多万,血与泪的教训!
- 大话西游|大话西游2(299)痛的教训!02年老玩家提示不要拿垃圾刷熟练度啊
- 暴雪|暴雪吸取了教训,《暗黑破坏神2:复活》测试的效果还不错
- 我的世界|我的世界:10个“过来人”的经验教训,处理好细节才能笑到最后!
- 华为|又想骗中国放弃自研?特朗普同意解封华为,损失1000亿后买来教训
- 华为|台积电之后,美国瞄准中芯国际?华为余承东:这是教训!