业务逻辑中如何处理断线重连

文章介绍业务逻辑中处理断线重连的方法。业务逻辑分服务器逻辑 AS 和客户端逻辑 AC,现实中 AC 本地存状态,断线重连会出现状态同步问题。提出 AS 和 AC 监听 on_relay_success 事件,AC 清空状态,AS 全量同步,规避事件通知改用状态实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章简单介绍了在业务逻辑中处理断线重连的一种方法

之前一直对如何在业务逻辑中处理断线重连没有一个清晰的认识,后来做了一些思考,这里简单记录一下~

假设存在一段业务逻辑 AAA ,整体实现上分为两部分:

  • 服务器逻辑部分 ASA_SAS
  • 客户端逻辑部分 ACA_CAC

一般来讲都是 ASA_SAS 负责维护逻辑状态与事件分发,ACA_CAC 则主要负责显示,输入等表现层的处理.

假设 ACA_CAC 不存在状态存储,仅作为纯终端显示的话,那么我们就不用处理断线重连的问题了,因为 ACA_CAC 的显示(由 ASA_SAS 驱动)总是与 ASA_SAS 同步的.

不过在现实的开发中并没有这么理想化, ACA_CAC 或多或少总会在本地存储一些状态,于是 ACA_CACASA_SAS 便产生了状态同步问题,如果网络条件良好,逻辑上也没有纰漏的话, ACA_CACASA_SAS 间的状态同步其实也不会存在什么问题.

只是一旦引入断线重连,状态同步问题就出现了,因为在 ACA_CAC 断线然后进行重连的这段时间中, ASA_SAS 发生的状态变化将无法同步至 ACA_CAC, 甚至 ACA_CAC 重连成功之后, ASA_SAS 本身都可能因为处理完毕而结束了自己的逻辑过程.

那么如何正确的处理这种情况下的断线重连呢?

以下是我的一点思考:

  • ASA_SASACA_CAC 都监听并处理 on_relay_successon\_relay\_successon_relay_success 事件
  • ACA_CACon_relay_successon\_relay\_successon_relay_success 事件中将本地所有相关的逻辑状态清空
  • ASA_SASon_relay_successon\_relay\_successon_relay_success 事件中将 ACA_CAC 所需要的逻辑状态做一次全量同步(需要保证 ASA_SASon_relay_successon\_relay\_successon_relay_success 事件发生在 ACA_CACon_relay_successon\_relay\_successon_relay_success 事件之后)

除了逻辑状态以外, ASA_SASACA_CAC 之间可能还会进行事件通知,推荐规避这些事件通知,都改以状态(的变化)实现.

采用上述方案之后, ACA_CAC 就能在重连成功之后,获得最新的 ASA_SAS 状态,于是便能与 ASA_SAS 再次形成同步;即便此时 ASA_SAS 逻辑已经退出,不再能推送当前状态信息,也因为 ACA_CACon_relay_successon\_relay\_successon_relay_success 之后主动做了一次状态清除操作,所以状态上也是同步的(ASA_SAS 退出便意味着 ACA_CAC 状态需要清除).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值