项目介绍
ShareDB
是一个支持多用户实时协作的全栈库,适用于构建各种需要同步数据更新的在线应用,如在线文档编辑器、实时仪表板和多玩家游戏等。
它提供了一套全面的实时同步和多用户协作解决方案,具备异步最终一致性、实时查询订阅、数据库集成、水平扩展、字段投影、中间件支持、跨平台使用、离线更改同步、内存数据库测试、历史版本访问和实时用户状态同步等特性。
ShareDB
包括一个 Node.js
服务器,用于协调和提交来自多个客户端的编辑,以及一个可在 Node.js
或浏览器中运行的 JavaScript
客户端,用于操作文档。核心通过操作转换(OT)
来处理底层的冲突管理,其实现由 ShareDB
的类型插件负责。
项目安装
bash
npm install --save sharedb
如果服务器和客户端有不同的依赖,ShareDB
应该被添加到两个包中。
也可以安装其他的OT类型
。具体类型查看地址:share.github.io/sharedb/typ...
基本使用
Node服务端
服务端示例使用 Express
和 ws
作为 WebSocket
服务器,并使用 @teamwork/websocket-json-stream
扩展将 WebSocket
转换为 Stream
javascript
var express = require('express')
var WebSocket = require('ws')
var http = require('http')
var ShareDB = require('sharedb')
var WebSocketJSONStream = require('@teamwork/websocket-json-stream')
var app = express()
var server = http.createServer(app)
var webSocketServer = WebSocket.Server({server: server})
var backend = new ShareDB()
webSocketServer.on('connection', (webSocket) => {
var stream = new WebSocketJSONStream(webSocket)
backend.listen(stream)
})
server.listen(8080)
客户端
客户端示例使用 ShareDB
的 Connection
来获取文档,订阅文档变化,并在浏览器中增加计数器的值。
javascript
var ReconnectingWebSocket = require('reconnecting-websocket')
var Connection = require('sharedb/lib/client').Connection
var socket = new ReconnectingWebSocket('ws://localhost:8080', [], {
// ShareDB handles dropped messages, and buffering them while the socket
// is closed has undefined behavior
maxEnqueuedMessages: 0
})
var connection = new Connection(socket)
var doc = connection.get('doc-collection', 'doc-id')
doc.subscribe((error) => {
if (error) return console.error(error)
// If doc.type is undefined, the document has not been created, so let's create it
if (!doc.type) {
doc.create({counter: 0}, (error) => {
if (error) console.error(error)
})
}
});
doc.on('op', (op) => {
console.log('count', doc.data.counter)
})
window.increment = () => {
// Increment the counter by 1
doc.submitOp([{p: ['counter'], na: 1}])
}
适配器
数据库适配器
ShareDB
支持多种数据库,包括MemoryDB
、ShareDBMongo
、ShareDBMingoMemory
和ShareDBPostgres
使用方式:
javascript
const backend = new Backend({
db: new MemoryDB(),
})
发布/订阅适配器
发布/订阅(pub/sub)
适配器,包括内存型(MemoryPubSub)
、Redis(ShareDBRedisPubSub)
和WebSocket总线(ShareDBWSBusPubSub)
适配器
使用方式:
javascript
const backend = new Backend({
pubsub: new MemoryPubSub(),
})
里程碑适配器
ShareDB
的里程碑适配器目前只支持 ShareDBMilestoneMongo
,它用于存储文档的定期快照以加速文档历史记录的访问,并通过中间件自定义快照行为。
官方示例
计数器
排行榜
更多官方示例可以下方地址中查阅:
总结
github地址:github.com/share/share...
我们在服务端代码中演示了如何设置 Express
应用、WebSocket
服务器和流式转换。
在客户端代码演示了创建 WebSocket
,连接到 ShareDB
服务器,获取文档,订阅文档操作,以及如何提交操作来更新文档。
介绍了 ShareDB
适配器的支持情况和基本使用。
希望通过对ShareDB
的简单介绍,能对你了解和使用它有一定的帮助。
-- 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名