我一直在编写自己的Javascript编辑器,其功能类似于Google Docs(允许多人同时处理它).有一点我不明白:
假设您已将用户A和用户B直接相互连接,网络延迟为10毫秒.我假设编辑器使用diff系统(据我理解Docs),其中编辑表示为"在索引3处插入'文本',并且差异被加时间戳并强制按时间顺序应用于所有客户端.
让我们从包含文本的文档开始:"xyz123"
用户A在时间戳001ms处在文档的开头键入"abc",而用户B在时间戳005ms处在"xyz"和"123"之间键入"hello".
两个用户都希望结果是:"abcxyzhello123",但考虑到网络延迟:
当然," abchello xyz123"与" abc xyz hello 123"不一样
除了字面上为每个角色分配自己的唯一ID之外,我无法想象Google将如何有效地解决这个问题.
我想到的一些可能性:
我正在阅读http://www.waveprotocol.org/whitepapers/operational-transform,但很想听到解决这个问题的所有方法.
algorithm editing google-docs collaborative-editing operational-transform
是否可以在https://github.com/ajaxorg/cloud9构建的自托管环境中拥有协作和工作区共享功能?
有什么可以替代TogetherJS的好方法吗?它的GitHub已经几个月没有任何活动了,这篇文章说它目前已经死了,未来不确定。
可以说,ShareJS 是 TogetherJS 最独特的功能,它能够查看他人的光标以用于故障排除/远程协助。
所以,我正在考虑实现一个实时协作编辑器,因为一些预制的(例如etherpad)缺乏专用编辑器的功能.
我目前使用CKEditor,但我希望切换到Aloha Editor.
我将使用Pusher进行推送通知/更新到我的应用程序周围的地方,以便在多人使用该软件时,一切都可以尽可能实时.
现在,我最初关于如何实现协作编辑器的思考过程似乎非常缓慢 - 使用推送器不断更换整个文本字段...但是移动巨大的文本块会快速变得非常丑陋,我不太确定当有多个(> 5)人同时处理文本时该怎么办..所以......必须有一种更容易,更有网络效率的方式来进行协作编辑.
想法?
我有这个错误消息:
无法加载 Collabora Online - 请稍后重试
当我尝试打开文件时,位于自托管 nextcloud 网站的右上角
欢迎来到 Nextcloud Hub.docx
在 Nextcloud 中,它作为 Docker 容器运行。
欢迎使用 Nextcloud Hub.docx位于“文件”>“文档”中,作为示例文件。
我使用的是nextcloud:19-apache的官方映像
,我是这样启动的:
#!/bin/sh
set -e;
set -f;
docker run -d \
--name nextcloud \
-p 8080:80 \
-v /tmp/nextcloud/var/www/html:/var/www/html \
-v /tmp/nextcloud/var/lib/mysql:/var/lib/mysql \
-v /tmp/nextcloud/var/lib/postgresql/data:/var/lib/postgresql/data \
nextcloud:19-apache
sleep 3;
firefox "http://localhost:8080"
exit 0;
Run Code Online (Sandbox Code Playgroud)
我这样检查日志:
docker logs nextcloud
Run Code Online (Sandbox Code Playgroud)
除了这一条目之外,没有任何错误/警告:
AH00558:apache2:无法可靠地确定服务器的完全限定域名(使用 172.17.0.2)。全局设置“ServerName”指令以抑制此消息
单击 nextcloud web 设置 > 应用程序显示 Collabora 所需的两个应用程序均已安装:
然而,没有它们的状态是否正常运行。
所有正在运行的容器的状态:
NETWORK ID NAME DRIVER SCOPE
88efc7e2489f …Run Code Online (Sandbox Code Playgroud) javascript ×2
algorithm ×1
cloud9-ide ×1
docker ×1
document ×1
editing ×1
google-docs ×1
html ×1
nextcloud ×1
php ×1
share ×1
togetherjs ×1
websocket ×1