@ g9tm/ 同步数据
类型脚本双 G9 同步数据 .NET客户端: 离线第一次同步
一个设备的 SQLite 数据库和一个 PostgreSQL 服务器,用于 林克丝 应用程序(与
@g9tm/syncdata-lynx),节点和浏览器. 相同的协议,相同的引擎行为,和 同样的
本地数据库 作为.NET客户端——MAUI应用程序所写的数据库在Lynx应用程序中打开并持续同步.
| 入境点 | 什麽 |
|---|---|
@g9tm/syncdata | 发动机(G9SyncEngine),客户端模式,协议(DTOs,G9RowBatch帧),出错,摘要 |
@g9tm/syncdata/sqlite | sQLite 客户端商店 (G9SqliteSyncStore超过任意 G9SqliteDriver |
@g9tm/syncdata/signalr | 信号传输( R)G9SignalRSyncTransport), JSON 和 MessagePack, 包含精确的64位值 |
@g9tm/syncdata/node | 节点: sqlite 驱动程序(nodeSqliteDriverbrotli通过节点:zlib(useNodeBrotli(中文(简体) ) |
@g9tm/syncdata/testing | 任何运输过程中的过错注射(G9FaultInjectingTransport(中文(简体) ) |
@g9tm/syncdata/brotli-js | 纯 JavaScript Brotli 解码器,用于没有本地编码的运行时间 |
1.2.2版本——始终等于.NET包'版本. 什么样的东西可以说明什么, 以及每一个有意的区别: 议会.md。 。 。 .
安装
npm install @g9tm/syncdata @g9tm/signalr-supernetcore-client @microsoft/signalr @microsoft/signalr-protocol-msgpack @msgpack/msgpack
SignalR 包是可选的同位素:只有 @g9tm/syncdata/signalr 需要他们.
使用( 节点)
import { G9ESyncColumnType as T, G9SyncClientModelBuilder, G9SyncEngine, G9SyncParameters } from '@g9tm/syncdata';
import { G9SqliteSyncStore } from '@g9tm/syncdata/sqlite';
import { G9SignalRSyncTransport } from '@g9tm/syncdata/signalr';
import { nodeSqliteDriver, useNodeBrotli } from '@g9tm/syncdata/node';
useNodeBrotli(); // the server compresses frames with Brotli
// Tables in the order the .NET source generator emits them (entity type name), so both clients number them alike.
const model = new G9SyncClientModelBuilder()
.table('farm.Pot', 'Pot', (t) =>
t.key('Id').column('SiteId', T.Guid, false).column('Code', T.String, false).column('Weight', T.Decimal).index(null, false, 'SiteId'))
.table('farm.Site', 'Site', (t) => t.key('Id').column('Name', T.String, false))
.build();
const store = new G9SqliteSyncStore({ driver: nodeSqliteDriver(), databasePath: './device.db' });
const transport = new G9SignalRSyncTransport({ url: 'https://sync.example.com/g9sync', accessTokenFactory: () => token });
const engine = new G9SyncEngine(store, transport, model, { appVersion: '1.0.0' });
await engine.initialize();
await engine.subscribe('sites');
await engine.subscribe('site-pots', new G9SyncParameters().setGuid('SiteId', siteId));
const run = engine.run({ subscriptions: ['site-pots'] });
run.onProgress((p) => console.log(p.phase, Math.round(p.overall * 100) + '%'));
const result = await run.completion;
if (!result.isSuccess) console.error(result.error?.code, result.error?.message);
本地编辑是应用程序自身连接上的普通 SQL : 商店的触发器会捕捉它们, 接下来的运行会推
他们。 图标( E)engine.executeCommand),变化种子(readChangeFeed),拒绝,隔离和运行报告
在.NET上的工作(07-倾角引擎, (中文(简体) ), 08-克立特语Name) (中文(简体) ).
林克丝
使用 Lynx 的背景线程 @g9tm/syncdata-lynx数字 : useLynxBrotli() 财务报告和审定财务报表
createLynxSyncTransport({ url }) (MessagePack over the G9本土的WebSocket——发行Lynx Building没有他们的
g9Lynx Controls的本地SQLite驱动程序。 代码是ES2019 并且没有使用 API 背景
线程缺乏( 没有 BigInt, TextEncoder, (中文(简体) ), URL, (中文(简体) ), btoa, (中文(简体) ), globalThis —— 建造失败.
许可证
麻省理工学院. 布罗特利解码器 brotli-js 是谷歌(麻省理工学院): 第三次议会提名(md)。 。 。 .