diff --git a/projects/25464650-ed5d-440e-b362-190f2852d451/Checkpoint 2026-09-29 15-52-48 UTC [2365e8d4b5].md b/projects/25464650-ed5d-440e-b362-190f2852d451/Checkpoint 2026-09-29 15-52-48 UTC [2365e8d4b5].md new file mode 100644 index 0000000..2c4b62a --- /dev/null +++ b/projects/25464650-ed5d-440e-b362-190f2852d451/Checkpoint 2026-09-29 15-52-48 UTC [2365e8d4b5].md @@ -0,0 +1,25 @@ +--- +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,仓库仍为空。 \ No newline at end of file