介绍
是什么导致 Marshall 链路出现稳定性问题?
这些稳定性问题通常是由于未使用合适的硬件所致:- 24V/1.5A 电源
- 如果使用 USB 转 COM 适配器,必须使用 Chipi-X,这是 Nayax 技术团队唯一批准的类型。过去的经验也表明,其他类型的适配器可能(且往往)会导致稳定性问题。
- 机器 COM 端口的问题(物理连接/COM 端口管理)。
- 如果通过 LAN 使用 Marshall,可能是由于以太网连接器、LAN 通信等方面的问题。
您提到 Marshall 任务被“饿死”(starved)了。这是什么意思?
一旦 Marshall 任务得不到足够的优先级来运行,它就会被“饿死”,并可能出现异常行为。 在这种情况下,您的机器将停止发送 “Keep Alive” 信号。设备(VPOST/VPOSM)会因缺少 “Keep Alive” 而检测到机器已断开连接,并启动新的配对过程。 饥饿(Starvation)是您可能遇到的最严重的问题,根据其发生的时机不同可能导致意外行为(我想您已经见过这种情况),因此解决它非常重要。这些问题可能会从消费者的角度造成怪异的行为,甚至导致 Marshall 链路中断——这种情况本不应发生(一旦发生,您将无法发起或完成交易)。 导致 Marshall 任务饥饿(starvation)的可能原因包括:未赋予 Marshall 足够高的优先级来运行、机器执行其他任务导致未能及时响应 Marshall(keepalive 或其他命令)、除 SDK 之外的大量文件写入操作等。它看起来是什么样的?
一旦 Marshall 任务被饿死,您会看到以下情况:“keepalive” 机制的工作原理/饥饿(starvation)产生的原因
“no keep alive” 表示您的外围设备未响应 keep alive(默认每秒发生一次,除非另行配置),在这种情况下,系统会尝试重新发送该数据包。如果仍无响应,会再次尝试(1 次原始尝试加 2 次重试),如果这次尝试仍然失败,Marshall 链路将被判定为断开。配对过程(即 VPOST/VPOSM 与您的充电设备之间通信的建立)将被重新启动。 在某些情况下,饥饿(starvation)是由任务处理不当或大量文件写入(与 Marshall 日志写入无关)所致。在文件写入期间,所有任务都会被暂停,以防止 flash 损坏。 此外,饥饿(starvation)也可能是由于您的外围设备正在执行与 Marshall 无关的任务,导致它未能及时响应 Marshall 任务。我可以增加 keepalive 之间的时间间隔吗?这样能解决饥饿(starvation)问题吗?
该 SDK 的设计在 keepalive 间隔为 1 秒时效果最佳,将 keepalive 间隔增加到更长的时间并不能解决饥饿(starvation)问题——它只会使发现通信问题所需的时间大大延长。我们不建议将其设置为超过 5 秒。 例如,如果您将其配置为 30 秒,SDK 将需要 3*30=90 秒才能意识到存在问题,在这段时间里,VPOST 可能会显得“冻结”/无响应,从而使消费者感到困惑。每秒发生一次的 keepalive 并不是导致处理器过载的原因;真正的问题在于该任务本身未能获得足够的优先级来运行。注意:对于 VPOSM,在通过 ETH 使用 Marshall 的情况下,由于 LAN 的要求/限制,需要将 keepalive 设置为 10 秒。