V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jefferylong
V2EX  ›  程序员

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

  •  
  •   jefferylong · 2022-07-07 11:26:11 +08:00 · 3254 次点击
    这是一个创建于 873 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2022-07-11 19:41:55 +08:00
    eason1874
        1
    eason1874  
       2022-07-07 11:38:17 +08:00
    1 、监听修改,记录最后修改时间

    2 、定时保存,记录最后保存时间,每隔 5 秒比较最后修改和最后保存时间,如果保存时间早于修改时间,那就提交保存
    estk
        2
    estk  
       2022-07-07 11:54:20 +08:00 via Android
    一般是 websocket 通信吧
    luin
        3
    luin  
       2022-07-07 12:30:57 +08:00
    大概就是定时 post 修改数据,后端合并版本(多人同时改动时需要)后存到对象存储或数据库中
    whistleryz
        4
    whistleryz  
       2022-07-07 13:34:34 +08:00 via iPhone   ❤️ 2
    协作文档一般是编辑操作抽象为指令,post 到后端,后端进行 OT 操作入库,然后通过 socket 派发操作给所有浏览器再 OT
    yongchiu
        5
    yongchiu  
       2022-07-07 17:16:13 +08:00
    websocket 推送,每个在线文档都是一个房间,后台推送数据到前端
    LxnChan
        6
    LxnChan  
       2022-07-07 17:21:30 +08:00
    定时 post 后台,把数据定时传回去而已
    也会有加内容对比的,如果和多久时间前的内容一样则不往回 post
    HuangHuangHuang
        7
    HuangHuangHuang  
       2022-07-07 17:25:34 +08:00
    @estk 个人感觉,如果不是有双向通信的需求,比如能同时看到其他的修改状态的话,可以只用 post 请求就行,操作简单,服务端可控,扩展容易。
    XCFOX
        8
    XCFOX  
       2022-07-07 17:33:34 +08:00
    如果你关心在线多人文档的实现细节的话,可以看一下 yjs 的 demo
    https://docs.yjs.dev/getting-started/a-collaborative-editor
    mmdsun
        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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:03 · PVG 04:03 · LAX 12:03 · JFK 15:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.