构建

进程死了也留得下 — 用最不聪明的办法

作者: makemind · 2026年3月6日

到第四篇为止,等待人数是这么活着的:

var waiting = 3;

进程一死就回到 3。把柜台屏拔了再插,这队就等于没排过。

写下来

const _statePath = 'desk-state.json';

int _load() {
  final f = File(_statePath);
  if (!f.existsSync()) return 3;
  final m = jsonDecode(f.readAsStringSync()) as Map<String, dynamic>;
  return (m['waiting'] as num).toInt();
}

void _save(int waiting) =>
    File(_statePath).writeAsStringSync(jsonEncode({'waiting': waiting}));

在值改变时调用它。

waiting -= n;
_save(waiting);

为什么整份重写

只变一个值,却把整个文件重写一遍。低效。可这个做法有一个性质。

不会产生写了一半的记录。 写要么发生了,要么没发生。中途死掉,旧文件原样还在。

局部更新不是这样。就地改一条记录时死掉,留下的是 两边都不是的文件,下次启动解析就崩。从那时起,恢复就变成一件工作。

记录到了几万条,这个办法就不能用了。那是该上数据库的位置。但在那之前,这是最安全的。

放在哪一层

状态可能待的地方有三层。

多块画面看的是同一个值吗进程死了
画面里不是 —— 每块画面各有各的值没了
服务端进程没了
服务端之外(文件、数据库)还在

到第四篇为止是第二层。这一篇把它挪到第三层。

不定,就会落在第二层。 而它出事的那天,多半在晚上。

此内容需要开发者或更高等级

登录并升级您的方案即可继续阅读。

查看方案
Twitter