配置
本页介绍 Fory 构造函数的可选项。
创建 Fory 实例
直接把选项传给构造函数:
import 'package:fory/fory.dart';
// 默认配置,适合大多数单服务场景
final fory = Fory();
// 需要 Schema 演进的跨语言服务
final fory = Fory(
compatible: true,
maxDepth: 512,
);
每个应用创建一个实例并复用即可。按请求新建 Fory 没有任何收益。
选项
compatible
当你的服务需要处理来自另一份模型版本代码的载荷时,请设置为 true。例如各服务独立发布,无法保证通信双方同时升级。
final fory = Fory(compatible: true);
当 compatible: true 时:
- 一侧新增或删除字段不会破坏另一侧。
- 各端仍然必须使用相同的
namespace+typeName,或者相同的数字id来标识类型。
当 compatible: false(默认)时:
- 双方必须拥有完全相同的 Schema。这样会略快一些,适合仅有 Dart 服务或始终一起升级的场景。
checkStructVersion
仅在 compatible: false 时相关。当它为 true 时,Fory 会校验载荷中的 Schema 版本是否与接收端已知版本一致,从而在运行时尽早发现误用的 Schema。
final fory = Fory(
compatible: false,
checkStructVersion: true, // default
);
当 compatible: true 时,这个选项不起作用。
maxDepth
限制对象图的最大嵌套深度。如果你的数据确实有很深的树 形结构,可以增大它;如果你想快速拒绝异常深的载荷,可以减小它。
final fory = Fory(maxDepth: 128);
maxCollectionSize
任意单个 list、set 或 map 字段可接受的最大元素数。用于防止畸形消息触发失控的内存分配。
final fory = Fory(maxCollectionSize: 100000);
maxBinarySize
任意单个二进制 blob 字段允许接受的最大字节数。
final fory = Fory(maxBinarySize: 8 * 1024 * 1024);