1.初步分析

dev Tool调试发现多人在线编辑,类似于多人在线聊天,服务器负责收集客户端消息,然后集中处理服务器本地存储的文档。

调试发现,该服务基于websocket协议,通过分析ws消息流,可以得到客户端和服务器交互的方式。

  1. 客户端链接,服务器回复一条数据
  2. 客户端发送带有“client ready”的数据
  3. 客户端6秒间隔发送心跳包
  4. 接下来就可以正常发送编辑、修改的消息了

截取了一条编辑的数据,可以看到

type: USER_CHANGES

task_id: 需要和上一次上上次……不一样,建议随机数实现

c:[["BB08J2",7,7,4,4],……表示操作的单元格8行5列

"2":[165,"@\\\\℃:@"]……表示内容,修改"@\\\\℃:@"即可

这里用golang实现该ws客户端:

// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.package mainimport ("github.com/gorilla/websocket""log""os""os/signal""time"
)//var addr = flag.String("addr", "localhost:8080", "http service address")func main() {interrupt := make(chan os.Signal, 1)signal.Notify(interrupt, os.Interrupt)//1.创建连接c, _, err := websocket.DefaultDialer.Dial(wspath, nil)if err != nil {log.Fatal("dial:", err)}defer c.Close()done := make(chan struct{})//开启接收消息goroutinego func() {defer close(done)for {_, message, err := c.ReadMessage()if err != nil {log.Println("read:", err)return}log.Printf("recv: %s", message)}}()//发送client ready消息c.WriteMessage(websocket.BinaryMessage,[]byte(`42["post","{\"apid\":{\"s\":\"554557239478\",\"t\":1652718593193,\"i\":\"DUFpBc0JhWXRia3Vk\",\"g\":\"f7be4c0beadf755e6b25852d69c8cb83725a42a4\",\"apid\":\"\",\"r\":99},\"type\":\"CLIENT_READY\",\"task_id\":808447158586389,\"docid\":\"300000000$PZAsBaYtbkud\",\"uid\":\"144115217770477896\",\"cookie\":\" SID=6587823b09994d1c9b3ed14a1986e711715ea884b3d5487690649ecc92f23cfe;\",\"base_rev\":99,\"code_ver\":1,\"session_type\":0,\"gray\":0,\"dver\":\"2.10.0\",\"wl\":\"\",\"u\":\"7b2be78e572847379db881e1288db933\",\"generalpacket\":{\"rel_rev\":\"sheet-hotfix-20220513_1447-a8b28d0a44\",\"dver\":\"2.10.27540461\",\"right_tag\":1},\"docs_type\":\"sheet\"}\n{\"roomType\":\"padpage\",\"roomName\":\"padpage/300000000$PZAsBaYtbkud\",\"upid\":\"DUFpBc0JhWXRia3Vk\",\"gid\":\"300000000$PZAsBaYtbkud\",\"sid\":\"554557239478\",\"tid\":1652718593193,\"sig\":\"f7be4c0beadf755e6b25852d69c8cb83725a42a4\",\"data\":{\"stats\":{\"screen\":\"\"}}}"]`))//用来发送心跳消息ticker := time.NewTicker(6*time.Second)defer ticker.Stop()for {select {case <-done:returncase <-ticker.C:err = c.WriteMessage(websocket.TextMessage, []byte("42[\"post\",\"{\\\"type\\\":\\\"HEART_BEAT\\\",\\\"task_id\\\":8245210039230595,\\\"docid\\\":\\\"300000000$PZAsBaYtbkud\\\",\\\"uid\\\":\\\"144115217770477896\\\"}\\n\"]"))if err != nil {log.Println("write:", err)return}//捕获ctrl+c,没啥卵用case <-interrupt:log.Println("interrupt")err = c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))if err != nil {log.Println("write close:", err)return}select {case <-done:case <-time.After(time.Second):}return}}
}

就简单做了一个示例

腾讯文档多人在线编辑表格协议分析相关推荐

  1. vue+ts在线文档编辑(类腾讯文档)多人在线编辑-自定义页眉和分页打印(三)

    目录 前言 一.自定义页眉内容 二.分页文档打印 1.加入分页符 2.打印方法 3.打印模块完整代码 总结 前言 随着在线办公场景越来越多,同时需要各式各样办公软件,在开发时就用得到在线文档来内容指定 ...

  2. Python实现Excel表格图片下载-腾讯文档收集表下载Excel表格后下载图片

    代码目的 QQ腾讯文档收集表下载本地后变成Excel表格,可是腾讯文档内的图片变成了链接,为了不手动保存图片,所以写出以下代码来实现自动保存图片. 代码原理 准备工作: python编译器 pytho ...

  3. 文档管理软件在线编辑和协同

    文档管理软件哪个好?彩虹EDM图纸文档管理系统的协同办公产品不断的被普及使用,现在科技的发展也带动了文档管理系统的功能增加,现在很多企业也很重视支持在线编辑的文档管理的功能. 详细功能:协同办公平台- ...

  4. office文档多人共享编辑。

    以下方法可以在局域网中,多人同时对一个word文档或excel文档进行编辑: 第一步:随便打开word文档或excel文档,点击审阅,点击共享工作薄 第二步:在允许多用户同时编辑,同时允许工作簿合并打 ...

  5. 多人在线编辑文档 开发_太方便了,支持多人同时编辑,电脑和手机端实时同步保存...

    平时很多小伙伴都有编辑文档的需求,而且有时需要分工合作,将它们发送给自己的朋友或者同事等等,多人一起才能完成一项任务.除了互相来回发送显得不方便外,只能用手机或电脑单一的编辑,不能随时随地操作也很影响 ...

  6. 十三种技术文档模板_在线文档,知多少?

    不知大家有没有在线编辑文档的习惯 在线编辑文档有许多好处 比如:多平台同步.协作编辑等 今天给大家推荐三款在线文档软件 -- 金山文档.腾讯文档.石墨文档 限于篇幅,这里仅介绍它们对应的 Window ...

  7. python实现自动打卡_python实现腾讯文档自动打卡教程

    ​明明365天都不得不待在家里面,居然还要天天去腾讯文档打卡,烦死人了. 天天都填一样的内容,重复无意义的事情,时间就是金钱,浪费人时间约等于谋财害命呀. 所以参考了网络上的代码,并做了改进,用pyt ...

  8. 自动打卡python脚本_python实现腾讯文档自动打卡教程

    ​明明365天都不得不待在家里面,居然还要天天去腾讯文档打卡,烦死人了. 天天都填一样的内容,重复无意义的事情,时间就是金钱,浪费人时间约等于谋财害命呀. 所以参考了网络上的代码,并做了改进,用pyt ...

  9. 多人在线编辑文档 开发_腾讯文档,支持多人实时在线协同编辑

    多年前,在港资公司工作需要多人协同编辑文档,用的是VPN+Google Docs,很早就体验过多人在线协同办公的便利,那时候,APP.微信,甚至智能手机,都没普及. 现在,就算没有VPN,用不了Goo ...

最新文章

  1. tensorflow问题
  2. ASP.NET页面借助IFrame提交表单数据所遇到的问题
  3. java在cmd下编译运行
  4. mysql innodb 排他锁_MySQL 针对 InnoDB 引擎锁的种类:行锁(共享锁和排他锁)和表锁(意向共享锁和意向排他锁)...
  5. VMware安装虚拟机Ubuntu提示piix4_smbus 0000:00:007.3: Host SMBus controller not enabled错误解决办法...
  6. xp 设备管理器 android,XP设备管理器怎么打开?
  7. day11 内置函数
  8. Windows命令之ping命令
  9. 不同层级管理者应具备的特质
  10. Rabbitmq Plugin configuration unchanged. 问题完全解决方案
  11. Android Studio快速开发之道
  12. ubuntu安装uTorrent种子下载器
  13. qq发消息时键盘挡住了_QQ的说说被键盘挡住了怎么办
  14. 最全的肱三头肌训练图解,漂亮手臂必备
  15. ApiPost 前后端协作开发神器 Postman+Swagger+Mock+Websocket的完美替代品
  16. EOS的经济模型是什么?
  17. wps文档漫游删除_WPS自带的文档漫游和在线模板怎么关闭?
  18. 新手福利!超详细图标设计的七大原则
  19. 日志服务十大经典问题
  20. 使用51单片机控制舵机入门

热门文章

  1. OpenGL教程翻译 第二十六课 法线纹理
  2. 【Python语言基础】——Python 教程
  3. 证书:申请都在开发账号中
  4. 小蚁正式发布双目VR全景相机,便宜、高像素只售2499元。
  5. 单身社会如何生活-日本纪录片ガイアの夜明け系列
  6. Soul网关Hystrix插件相关知识点扫盲
  7. Windows~~~在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES) ,并修改MySQL密码
  8. 关于“为什么选择我们公司?”应聘者如何回答?
  9. steam下载捆绑流氓软件??!
  10. 如果编程语言也来玩权利的游戏,怎么安排角色?