使用同步文件夹在 12 行 Bash 中实现基于 CRDT 的 Messenger

主要观点:通过简单的 Bash 脚本创建一个类似消息传递的工具,利用 UUID 实现无中央服务器的分布式消息存储,基于 Conflict Free Replicated Data Types(CRDTs)原理,具有一些有趣特性,如离线机器可写入消息等,同时讨论了编辑和删除消息的方式及相关注意事项,强调 CRDTs 的简单性和强大功能。
关键信息:

  • 使用mkdir -p $(dirname $0)/data; cd data创建并进入数据目录。
  • print_messages函数用于清除屏幕、显示最后 30 条消息和提示输入。
  • export -f print_messages使子进程能看到该函数。
  • watchexec用于监控文件变化并重新打印消息。
  • 用 UUID 存储消息文件,避免文件名冲突。
  • 不能删除文件,通过创建更多文件实现类似删除效果。
  • 可进行更结构化的数据存储,如message:delete:edit:等。
    重要细节:
  • \033[31m等是 ANSI 转义码用于设置颜色。
  • watchexec可替换为fswatchfswatch在启动时不会触发,需先打印一次消息。
  • 使用ls -tr按时间倒序排列文件,利用文件修改日期保证同步后消息顺序一致。
  • 在 Pomodoro 示例中,通过创建和删除特定文件夹中的文件实现计数器功能。
  • 若在 Syncthing 中使用,可设置fsWatcherDelayS为 1 提高消息处理速度。
阅读 97
0 条评论