Skip to content

zh CN Synchronization

mizorewww edited this page Sep 23, 2026 · 10 revisions

缓存与同步

English · 指南首页

Termgram 会先显示本地缓存的聊天列表,再连接 Telegram。打开已有缓存的聊天时, 先读取未读边界附近的本地消息;没有未读时读取最近一页,同时在后台刷新。同步期间仍可阅读缓存。 发送消息等服务端操作会等待登录完成。

拉取历史、刷新聊天列表等请求不会阻塞实时消息。对于正在查看的群聊,还会按照 Telegram 返回的间隔主动补取差异。离开聊天或终端失去焦点后,会停止这项主动轮询; 普通推送和差异恢复继续运行。

自动已读回执以实际显示的会话为准:终端有焦点时,成功绘制后只确认到末尾已出现在 可见区域内的最新入站消息。打开聊天、加载历史或收到消息本身不会将其标为已读。 弹窗、隐藏的会话面板和后台窗口不会产生回执。跳转查看较早的回复也不会将整个聊天 标为已读。

每个聊天会缓存服务端的入站已读边界。同一聊天的回执会合并,失败后退避重试;较晚 返回的确认不会清掉边界之后的新消息。剩余未读数通过有时限的单聊天请求更新。 如果计数刷新失败,或新消息比旧计数先到达,显示的未读数可能暂时偏高,直到下一次 服务端更新或回执成功。旧版缓存会先从 Telegram 获取已读边界,再产生自动回执。

每个会话文件旁都有独立的 *.cache.sqlite3 数据库,保存消息正文、聊天元数据和 已下载附件的路径。登录凭据和用户设置分别保存。Unix 系统下数据库文件只允许当前 用户访问;数据库本身不加密。

缓存只包含 Termgram 已收到或加载过的消息,不代表账号的完整历史。每个账号最多 保留 100,000 条消息记录,旧记录会被清理。如果 Telegram 已无法重放某段过旧的差异, 对应的缓存会失效,并在查看时重新拉取。

清理缓存时,先退出 Termgram,再删除对应会话的 .cache.sqlite3 文件。保留 .session、settings.conf 和 appearance.json 即可保留登录状态与偏好。媒体文件可 单独删除对应的 .media 目录。同一账号缓存同时只允许一个进程持有。下次启动会重新建立消息缓存。

草稿保存在独立数据库:基础会话路径后加 .state.sqlite3,例如 termgram.session.state.sqlite3。各账号槽位共用此文件,记录按 Telegram 用户 ID、聊天 和可选话题 ID 隔离。它保存本地消息正文和回复对象,不保存登录密钥,文件本身不加密。 清理消息缓存时保留此文件。 消息缓存的淘汰和同步缺口失效不会删除草稿。

已有缓存的账号会先恢复草稿,再显示会话。SQLite 读取与合并写入运行在终端线程之外。 正常退出会写完最后一批编辑;写入失败时在应用内提示并重试。事务失败会保留之前的草稿。 重启后同时恢复正文、回复对象和 Unicode 光标位置。

完整更新批次及其同步进度按顺序提交。写入中断后可能重放已收到的更新,但不会用 超前的进度跳过尚未提交的消息。Telegram 会话中的 peer 元数据与消息缓存进度分开管理。

底层 Grammers 更新引擎遵循 Telegram 更新协议。 目前尚未进行与 Telegram Desktop 的端到端延迟对比测试。


Documentation source / 文档来源

Clone this wiki locally