Hocuspocus是一个基于Y.js的即插即用协作后端,最新发布的v4版本带来了更多功能。如果你想在自己的应用中实现实时协作编辑(类似Google Docs),Hocuspocus是最成熟的开源方案之一。
什么是Hocuspocus?
Hocuspocus是由Tiptap团队(YC S23孵化)开发的协作后端,基于Y.js CRDT(冲突自由复制数据类型)实现。它提供了:
- WebSocket实时通信
- 文档持久化存储
- 用户认证和权限管理
- 可扩展的插件系统
- SQLite、PostgreSQL等存储后端
快速开始
安装依赖:
npm install @hocuspocus/server @hocuspocus/extension-sqlite
创建一个基本的协作服务器:
import { Server } from '@hocuspocus/server'
import { SQLite } from '@hocuspocus/extension-sqlite'
const server = new Server({
port: 1234,
async onConnect() {
console.log('🔮 新用户连接')
},
async onAuthenticate({ token }) {
// 验证用户token
if (token !== 'valid-token') {
throw new Error('认证失败')
}
return { user: { name: 'User' } }
},
extensions: [
new SQLite({
database: 'db.sqlite',
}),
],
})
server.listen()
console.log('协作服务器运行在 ws://127.0.0.1:1234')
与前端集成
配合Tiptap编辑器使用:
import { useEditor, EditorContent } from '@tiptap/react'
import StarterKit from '@tiptap/starter-kit'
import Collaboration from '@tiptap/extension-collaboration'
import { HocuspocusProvider } from '@hocuspocus/provider'
const provider = new HocuspocusProvider({
url: 'ws://127.0.0.1:1234',
name: 'my-document',
token: 'valid-token',
})
function Editor() {
const editor = useEditor({
extensions: [
StarterKit,
Collaboration.configure({
document: provider.document,
}),
],
})
return <EditorContent editor={editor} />
}
主要特性
- 实时协作:多人同时编辑同一文档,实时同步
- 离线支持:基于CRDT,断网后重连自动合并
- 权限控制:细粒度的文档级别权限管理
- Webhook:支持文档变更通知
- 可扩展:通过extension机制添加自定义功能
适用场景
- 团队文档协作工具
- 在线笔记应用
- 代码编辑器的实时协作
- 表单设计器
- 白板和画布应用
与Google Docs的对比
| 特性 | Hocuspocus | Google Docs |
|---|---|---|
| 自托管 | ✅ | ❌ |
| 数据控制 | 完全控制 | 在Google服务器上 |
| 定制性 | 完全可定制 | 有限 |
| 成本 | 免费开源 | 按用户收费 |
| 离线支持 | ✅ CRDT | 有限 |
总结
Hocuspocus 4为需要实时协作功能的开发者提供了一个成熟的开源方案。如果你正在构建需要多人协作的应用,或者想替代Google Docs等商业服务,Hocuspocus值得考虑。
本文参考来源:Hocuspocus GitHub仓库 | 官方文档
© 版权声明
THE END


















暂无评论内容