解决服务器通信丢消息策略:ACK回执与并发思考

需积分: 9 0 下载量 2 浏览量 更新于2024-09-14 收藏 328KB PPT 举报
本文主要探讨了服务器通信过程中可能出现的消息丢失问题及其解决方案,同时引入了Erlang编程语言作为处理并发和容错的有效工具。 在服务器通信中,理想状态下,网络状况良好,消息传递应无丢失。然而,在实际操作中,由于网络的不稳定性,特别是在移动网络环境下,如地铁、街道或楼宇,信号可能会极低甚至暂时中断,导致通信受阻。在这种情况下,消息丢失可能有两种情况:一是客户端A发送消息失败,二是服务器在转发过程中出现问题,从而使客户端B无法接收到消息。 为了解决消息丢失的问题,提出了一种解决方案,即在每次消息发送和转发时都添加ACK(Acknowledgement)回执确认。当接收方成功接收到消息后,会返回一个ACK,表明消息已被正确接收。但这种方法引出了新的问题,即ACK消息本身也可能存在发送失败的情况,这可能导致客户端B收到重复消息。目前的暂时解决办法是对消息进行唯一ID标识,即使收到重复消息,UI层面上也不会展示出来。 在讨论环节,作者询问了大家是如何处理消息丢失和重复问题的,暗示这是一个开放性的话题,期待更多的解决方案和经验分享。 随后,文章转向了Erlang编程语言的介绍。Erlang是一种为并发应用设计的语言,它模拟了真实世界中物体行为的并发结构,强调通过消息传递进行通信,同时对容错、分布式和多核环境有很好的支持。Erlang中的变量不可变,这避免了因变量多次赋值引起的复杂性,减少了内存共享和锁的使用,有利于编写并行化的程序。此外,Erlang不会出现溢出问题,展示了其在处理数学运算时的稳健性。 解决服务器通信丢消息的关键在于引入可靠的确认机制,并考虑如何处理由此产生的副作用,如重复消息。Erlang语言以其并发特性和容错能力,为处理这些问题提供了一个有效且独特的视角。