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