Files
MemRelay/projects/25464650-ed5d-440e-b362-190f2852d451/Checkpoint 2026-09-29 15-52-48 UTC [2365e8d4b5].md
T
memrelay 6dedb796eb create: Checkpoint 2026-09-29 15:52:48 UTC [2365e8d4b5]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260929-1552b
MemRelay-Resource: de804d80-c991-45b0-ae0b-9b07f573f022
2026-09-29 23:52:51 +08:00

25 lines
1.7 KiB
Markdown

---
title: Checkpoint 2026-09-29 15:52:48 UTC [2365e8d4b5]
type: checkpoint
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-15-52-48-utc-2365e8d4b5
stable_id: de804d80-c991-45b0-ae0b-9b07f573f022
scope: project
memory_type: checkpoint
project_id: 25464650-ed5d-440e-b362-190f2852d451
usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998
status: active
revision: 1
request_id: nixmsg-ckpt-20260929-1552b
created_at: '2026-09-29T15:52:48.620315+00:00'
updated_at: '2026-09-29T15:52:48.620315+00:00'
tags:
- nixmsg
- design
---
完成:用户补充并已写入需求(记忆 9cea62eb-5435-4fb1-af51-9699bb182b1a revision 2)。单机不做集群;设备 1000 以内,可能有嵌入式;发送时可选择对方不在线是否保留;离线消息必须有过期时间,超时销毁;弱网也要尽量送达。
原因:数据面仍用 MQTT,离线邮箱用自己的 SQLite,不能只靠 broker 会话队列。
建议(尚未经用户明确说开工,不得当作已裁定决定):单机 Docker Compose。Mosquitto 负责在线长连接与 QoS 1 重传。FastAPI 加 SQLite 负责设备密码、在线查询,以及可选离线邮箱(按消息 TTL,上线后按序补发,超时删除)。对外一个 WebSocket 端口;极小嵌入式若跑不动 WebSocket,再单独开 1883。传达语义是至少一次,消息带 ID 供接收方去重。在线抖动靠 MQTT 重传;已经离线且选择保留时才进 SQLite。不要用 EMQX,不要做集群。
验证:未写代码。
下一步:等用户说开工后再搭 Docker Compose 骨架。
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451,目录 e:/code/NixMsg,仓库仍为空。