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