腾讯文档多人在线编辑表格协议分析
1.初步分析
dev Tool调试发现多人在线编辑,类似于多人在线聊天,服务器负责收集客户端消息,然后集中处理服务器本地存储的文档。
调试发现,该服务基于websocket协议,通过分析ws消息流,可以得到客户端和服务器交互的方式。
- 客户端链接,服务器回复一条数据
- 客户端发送带有“client ready”的数据
- 客户端6秒间隔发送心跳包
- 接下来就可以正常发送编辑、修改的消息了
截取了一条编辑的数据,可以看到
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}}
}
就简单做了一个示例
腾讯文档多人在线编辑表格协议分析相关推荐
- vue+ts在线文档编辑(类腾讯文档)多人在线编辑-自定义页眉和分页打印(三)
目录 前言 一.自定义页眉内容 二.分页文档打印 1.加入分页符 2.打印方法 3.打印模块完整代码 总结 前言 随着在线办公场景越来越多,同时需要各式各样办公软件,在开发时就用得到在线文档来内容指定 ...
- Python实现Excel表格图片下载-腾讯文档收集表下载Excel表格后下载图片
代码目的 QQ腾讯文档收集表下载本地后变成Excel表格,可是腾讯文档内的图片变成了链接,为了不手动保存图片,所以写出以下代码来实现自动保存图片. 代码原理 准备工作: python编译器 pytho ...
- 文档管理软件在线编辑和协同
文档管理软件哪个好?彩虹EDM图纸文档管理系统的协同办公产品不断的被普及使用,现在科技的发展也带动了文档管理系统的功能增加,现在很多企业也很重视支持在线编辑的文档管理的功能. 详细功能:协同办公平台- ...
- office文档多人共享编辑。
以下方法可以在局域网中,多人同时对一个word文档或excel文档进行编辑: 第一步:随便打开word文档或excel文档,点击审阅,点击共享工作薄 第二步:在允许多用户同时编辑,同时允许工作簿合并打 ...
- 多人在线编辑文档 开发_太方便了,支持多人同时编辑,电脑和手机端实时同步保存...
平时很多小伙伴都有编辑文档的需求,而且有时需要分工合作,将它们发送给自己的朋友或者同事等等,多人一起才能完成一项任务.除了互相来回发送显得不方便外,只能用手机或电脑单一的编辑,不能随时随地操作也很影响 ...
- 十三种技术文档模板_在线文档,知多少?
不知大家有没有在线编辑文档的习惯 在线编辑文档有许多好处 比如:多平台同步.协作编辑等 今天给大家推荐三款在线文档软件 -- 金山文档.腾讯文档.石墨文档 限于篇幅,这里仅介绍它们对应的 Window ...
- python实现自动打卡_python实现腾讯文档自动打卡教程
明明365天都不得不待在家里面,居然还要天天去腾讯文档打卡,烦死人了. 天天都填一样的内容,重复无意义的事情,时间就是金钱,浪费人时间约等于谋财害命呀. 所以参考了网络上的代码,并做了改进,用pyt ...
- 自动打卡python脚本_python实现腾讯文档自动打卡教程
明明365天都不得不待在家里面,居然还要天天去腾讯文档打卡,烦死人了. 天天都填一样的内容,重复无意义的事情,时间就是金钱,浪费人时间约等于谋财害命呀. 所以参考了网络上的代码,并做了改进,用pyt ...
- 多人在线编辑文档 开发_腾讯文档,支持多人实时在线协同编辑
多年前,在港资公司工作需要多人协同编辑文档,用的是VPN+Google Docs,很早就体验过多人在线协同办公的便利,那时候,APP.微信,甚至智能手机,都没普及. 现在,就算没有VPN,用不了Goo ...
最新文章
- tensorflow问题
- ASP.NET页面借助IFrame提交表单数据所遇到的问题
- java在cmd下编译运行
- mysql innodb 排他锁_MySQL 针对 InnoDB 引擎锁的种类:行锁(共享锁和排他锁)和表锁(意向共享锁和意向排他锁)...
- VMware安装虚拟机Ubuntu提示piix4_smbus 0000:00:007.3: Host SMBus controller not enabled错误解决办法...
- xp 设备管理器 android,XP设备管理器怎么打开?
- day11 内置函数
- Windows命令之ping命令
- 不同层级管理者应具备的特质
- Rabbitmq Plugin configuration unchanged. 问题完全解决方案
- Android Studio快速开发之道
- ubuntu安装uTorrent种子下载器
- qq发消息时键盘挡住了_QQ的说说被键盘挡住了怎么办
- 最全的肱三头肌训练图解,漂亮手臂必备
- ApiPost 前后端协作开发神器 Postman+Swagger+Mock+Websocket的完美替代品
- EOS的经济模型是什么?
- wps文档漫游删除_WPS自带的文档漫游和在线模板怎么关闭?
- 新手福利!超详细图标设计的七大原则
- 日志服务十大经典问题
- 使用51单片机控制舵机入门
热门文章
- OpenGL教程翻译 第二十六课 法线纹理
- 【Python语言基础】——Python 教程
- 证书:申请都在开发账号中
- 小蚁正式发布双目VR全景相机,便宜、高像素只售2499元。
- 单身社会如何生活-日本纪录片ガイアの夜明け系列
- Soul网关Hystrix插件相关知识点扫盲
- Windows~~~在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES) ,并修改MySQL密码
- 关于“为什么选择我们公司?”应聘者如何回答?
- steam下载捆绑流氓软件??!
- 如果编程语言也来玩权利的游戏,怎么安排角色?