在线笔记,实时保存是怎么实现的?

2022-07-07 11:26:11 +08:00
 jefferylong

在线笔记,实时保存是怎么实现的?监听文字修改,然后 post 数据? 服务器压力大吗? 后端这块一般是怎么处理的?

3278 次点击
所在节点    程序员
9 条回复
eason1874
2022-07-07 11:38:17 +08:00
1 、监听修改,记录最后修改时间

2 、定时保存,记录最后保存时间,每隔 5 秒比较最后修改和最后保存时间,如果保存时间早于修改时间,那就提交保存
estk
2022-07-07 11:54:20 +08:00
一般是 websocket 通信吧
luin
2022-07-07 12:30:57 +08:00
大概就是定时 post 修改数据,后端合并版本(多人同时改动时需要)后存到对象存储或数据库中
whistleryz
2022-07-07 13:34:34 +08:00
协作文档一般是编辑操作抽象为指令,post 到后端,后端进行 OT 操作入库,然后通过 socket 派发操作给所有浏览器再 OT
yongchiu
2022-07-07 17:16:13 +08:00
websocket 推送,每个在线文档都是一个房间,后台推送数据到前端
LxnChan
2022-07-07 17:21:30 +08:00
定时 post 后台,把数据定时传回去而已
也会有加内容对比的,如果和多久时间前的内容一样则不往回 post
HuangHuangHuang
2022-07-07 17:25:34 +08:00
@estk 个人感觉,如果不是有双向通信的需求,比如能同时看到其他的修改状态的话,可以只用 post 请求就行,操作简单,服务端可控,扩展容易。
XCFOX
2022-07-07 17:33:34 +08:00
如果你关心在线多人文档的实现细节的话,可以看一下 yjs 的 demo
https://docs.yjs.dev/getting-started/a-collaborative-editor
mmdsun
2022-07-11 19:41:55 +08:00
这种属于实时 web 应用吧。OneNote 电脑和手机同时打开同个文章,编辑的时候都是实时毫秒级别同步的,不是定时 POST 接口

后台相关技术:

SignalR: https://dotnet.microsoft.com/zh-cn/apps/aspnet/signalr

Java ,Spring 可以用,RSocket

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864626

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX