Description
Changelog
Reviews (0)
Feature:
- Without losing type information. Need not type detection and forced typce conversion in cross end transfer,just like local parameter transfer.
- Integer are variable length serialization.
- The serialized data size is smaller than JSON text to utf8 and the native serialization method
var_to_bytes().GUS is especially suitable for the serialization of structured small data transfer in multiplayer games. - GDExtension plugin, high performance.
You can run the
EditorScriptwhich namedGUS_benchmark.gdto view the contrast betweenGUS,Native, andJSON.
How to use:
- Pass variable which without
Object,OID,Callable,SignalintoGUS.var_to_bytes()and get the serialized data, than send to network peer. - After the remote network peer obtains the serialized data, passe it into
GUS.bytes_to_var()to get the same variable as before serialization.
Be careful:
ArrayandDictionaryshould not containObject,RID,CallableandSignal.
How to compile:
- Follow offical tutorial to set up you develop enviroment.
- Clone this repository (with submodule).
- You must generate bindings and build library of
godot-cppat least once. - You can use generate and build manully by steps below: a. Navigate togodot-cppfolder. b. Run command:
c. Now you can addscons generate_bindings=yes build_library=yesgenerate_bindings=no build_library=noat next stage to avoid generate bindings and build library every time when compilingGUS.- (Recommand) Generate bindings and build library every time when compiling `GUS`, to keep the compiling condition of `godot-cpp` same as `GUS`. Just skip this stage and add `generate_bindings=yes build_library=yes` or ignore these command arguments. Don't worry, generate bindings and build library of `godot-cpp` would not take many time if the compile conditions have not change. - Here is a little different from
godot-cppto compileGUS(of course, you can usesconsto compile, too). To do some post process, I use a tool script to compileGUS. Navigate to root folder, run command as below to compileGUS:
You can add arguments like to buildpython build.pygodot-cppat this stage. To learn more arguments detail, run this command.
Specially:python build.py -h- If you not specify the argument
target, this tool will build bothtarget=template_debugandtarget=template_release. - If you add argument
dev_build, this tool will copy and rename the built shared libraries todistfolder with replacing.dev.to.(in order to avoid editgus2.gdextension).
- If you not specify the argument
- Now, you can get the addon which be located at
dist. Notice:- If your use
sconsinstead ofpython build_tool, you can only get dynamic library atbinfolder. - If build for
macos, its binaries will generate atdistdirectly.
- If your use
Others
If this plugin can help you, please consider to buy me a coffee.
Benchmark 2.2.0:
null - value:<null>
[GUS]: 1 bytes ser 4 usec deser 1 usec
[Native]: 4 bytes ser 1 usec deser 2 usec
[JSON]: 4 bytes ser 5 usec deser 3 usec
bool - value:true
[GUS]: 1 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 4 bytes ser 3 usec deser 2 usec
bool - value:false
[GUS]: 1 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 5 bytes ser 3 usec deser 2 usec
int1 - value:122
[GUS]: 3 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 3 bytes ser 3 usec deser 1 usec
int2 - value:23611
[GUS]: 4 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 5 bytes ser 4 usec deser 1 usec
int3 - value:-8016784
[GUS]: 5 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 8 bytes ser 30 usec deser 1 usec
int4 - value:1783875844
[GUS]: 6 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 0 usec
[JSON]: 10 bytes ser 3 usec deser 1 usec
int5 - value:-533449183297
[GUS]: 7 bytes ser 2 usec deser 1 usec
[Native]: 12 bytes ser 1 usec deser 1 usec
[JSON]: 13 bytes ser 3 usec deser 1 usec
int6 - value:99315901321300
[GUS]: 8 bytes ser 2 usec deser 1 usec
[Native]: 12 bytes ser 0 usec deser 0 usec
[JSON]: 14 bytes ser 3 usec deser 1 usec
int7 - value:17047537962766401
[GUS]: 9 bytes ser 2 usec deser 1 usec
[Native]: 12 bytes ser 1 usec deser 1 usec
[JSON]: 17 bytes ser 6 usec deser 1 usec
int8 - value:-8838969341549745360
[GUS]: 11 bytes ser 2 usec deser 1 usec
[Native]: 12 bytes ser 0 usec deser 0 usec
[JSON]: 20 bytes ser 3 usec deser 2 usec
float - value:-105.0532
[GUS]: 9 bytes ser 2 usec deser 1 usec
[Native]: 12 bytes ser 1 usec deser 1 usec
[JSON]: 9 bytes ser 10 usec deser 1 usec
String - value:test 测试
[GUS]: 13 bytes ser 4 usec deser 2 usec
[Native]: 20 bytes ser 1 usec deser 1 usec
[JSON]: 13 bytes ser 5 usec deser 2 usec
StringName - value:TestStringName
[GUS]: 16 bytes ser 5 usec deser 2 usec
[Native]: 24 bytes ser 1 usec deser 2 usec
[JSON]: 16 bytes ser 20 usec deser 2 usec
Vector2 - value:(-423, 46.8005)
[GUS]: 9 bytes ser 1 usec deser 0 usec
[Native]: 12 bytes ser 1 usec deser 1 usec
[JSON]: 17 bytes ser 9 usec deser 2 usec
Vector2i - value:(-423, 23611)
[GUS]: 9 bytes ser 2 usec deser 1 usec
[Native]: 12 bytes ser 1 usec deser 1 usec
[JSON]: 15 bytes ser 7 usec deser 2 usec
Vector3 - value:(52011, -541.3327, 77441)
[GUS]: 13 bytes ser 1 usec deser 0 usec
[Native]: 16 bytes ser 1 usec deser 1 usec
[JSON]: 27 bytes ser 11 usec deser 3 usec
Vector3i - value:(-423, 23611, 52011)
[GUS]: 13 bytes ser 2 usec deser 0 usec
[Native]: 16 bytes ser 0 usec deser 1 usec
[JSON]: 22 bytes ser 7 usec deser 2 usec
Vector4 - value:(5211, -541.327, 7441, 1.23)
[GUS]: 17 bytes ser 2 usec deser 1 usec
[Native]: 20 bytes ser 1 usec deser 1 usec
[JSON]: 30 bytes ser 12 usec deser 2 usec
Vector4i - value:(-42, 49947, 5211, 445)
[GUS]: 17 bytes ser 2 usec deser 1 usec
[Native]: 20 bytes ser 1 usec deser 1 usec
[JSON]: 25 bytes ser 8 usec deser 2 usec
Projection - value:
8740.2373046875, 0, 0, 0
0, 441.044006347656, 0, 0
0, 0, 1, 0
56.6220016479492, -77.8499984741211, 0, 1
[GUS]: 65 bytes ser 2 usec deser 1 usec
[Native]: 68 bytes ser 1 usec deser 1 usec
[JSON]: 110 bytes ser 40 usec deser 28 usec
Rect2 - value:[P: (56.622, -77.85), S: (8740.237, 441.044)]
[GUS]: 17 bytes ser 2 usec deser 0 usec
[Native]: 20 bytes ser 1 usec deser 1 usec
[JSON]: 47 bytes ser 15 usec deser 3 usec
Rect2i - value:[P: (-495747255, 323484462), S: (1855859115, 474812983)]
[GUS]: 17 bytes ser 1 usec deser 1 usec
[Native]: 20 bytes ser 1 usec deser 1 usec
[JSON]: 58 bytes ser 11 usec deser 2 usec
Transform2D - value:[X: (1, 0), Y: (0, -1), O: (513, 88.5)]
[GUS]: 25 bytes ser 2 usec deser 1 usec
[Native]: 28 bytes ser 1 usec deser 1 usec
[JSON]: 41 bytes ser 13 usec deser 3 usec
Plane - value:[N: (-0.022075, 0.354495, 0.934797), D: 0.301078]
[GUS]: 17 bytes ser 2 usec deser 1 usec
[Native]: 20 bytes ser 1 usec deser 1 usec
[JSON]: 51 bytes ser 30 usec deser 3 usec
Quaternion - value:(-54.55, 876, 2310, 744)
[GUS]: 17 bytes ser 15 usec deser 1 usec
[Native]: 20 bytes ser 1 usec deser 1 usec
[JSON]: 26 bytes ser 13 usec deser 3 usec
AABB - value:[P: (-77.85, 8740.237, 441.044), S: (105, 50, 68)]
[GUS]: 25 bytes ser 2 usec deser 1 usec
[Native]: 28 bytes ser 1 usec deser 1 usec
[JSON]: 52 bytes ser 14 usec deser 3 usec
Basis - value:[X: (1, 0, 0), Y: (0, -1, 0), Z: (0, 0, 1)]
[GUS]: 37 bytes ser 2 usec deser 1 usec
[Native]: 40 bytes ser 1 usec deser 1 usec
[JSON]: 45 bytes ser 13 usec deser 2 usec
Transform3D - value:[X: (1, 0, 0), Y: (0, -1, 0), Z: (0, 0, 1), O: (513, -88.5, 105)]
[GUS]: 49 bytes ser 2 usec deser 1 usec
[Native]: 52 bytes ser 1 usec deser 1 usec
[JSON]: 67 bytes ser 16 usec deser 3 usec
Color - value:(1, 1, 1, 1)
[GUS]: 33 bytes ser 2 usec deser 1 usec
[Native]: 20 bytes ser 1 usec deser 1 usec
[JSON]: 14 bytes ser 25 usec deser 1 usec
NodePath - value:/root/@EditorNode@16886/@Panel@13
[GUS]: 35 bytes ser 5 usec deser 4 usec
[Native]: 64 bytes ser 3 usec deser 3 usec
[JSON]: 35 bytes ser 7 usec deser 3 usec
Array - value:[574, -21, (-423, 46.8005), (0, 1, 1, 1), "acxx"]
[GUS]: 62 bytes ser 8 usec deser 6 usec
[Native]: 68 bytes ser 3 usec deser 5 usec
[JSON]: 49 bytes ser 60 usec deser 7 usec
Dictionary - value:{ "k_str": "value1", "k_color": (0.9412, 0.9725, 1, 1), "k_int": 123123, "k_float": 44.886, "k_vec3": (52011, -541.3327, 77441), 532: [574, -21, (-423, 46.8005), (0, 1, 1, 1), "acxx"] }
[GUS]: 174 bytes ser 17 usec deser 7 usec
[Native]: 236 bytes ser 7 usec deser 6 usec
[JSON]: 178 bytes ser 45 usec deser 12 usec
Empty Array - value:[]
[GUS]: 1 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 2 usec
[JSON]: 2 bytes ser 3 usec deser 1 usec
Empty Dictionary - value:{ }
[GUS]: 1 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 2 bytes ser 5 usec deser 1 usec
Empty PackedByteArray - Size:0
[GUS]: 1 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 4 bytes ser 5 usec deser 1 usec
Empty PackedInt32Array - Size:0
[GUS]: 1 bytes ser 3 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 2 bytes ser 4 usec deser 1 usec
Empty PackedInt64Array - Size:0
[GUS]: 1 bytes ser 3 usec deser 0 usec
[Native]: 8 bytes ser 0 usec deser 2 usec
[JSON]: 2 bytes ser 3 usec deser 1 usec
Empty PackedFloat32Array - Size:0
[GUS]: 1 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 2 usec
[JSON]: 2 bytes ser 3 usec deser 1 usec
Empty PackedFloat64Array - Size:0
[GUS]: 1 bytes ser 2 usec deser 1 usec
[Native]: 8 bytes ser 1 usec deser 2 usec
[JSON]: 2 bytes ser 3 usec deser 1 usec
Empty PackedStringArray - Size:0
[GUS]: 1 bytes ser 2 usec deser 0 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 2 bytes ser 3 usec deser 1 usec
Empty PackedVector2Array - Size:0
[GUS]: 1 bytes ser 2 usec deser 0 usec
[Native]: 8 bytes ser 1 usec deser 1 usec
[JSON]: 4 bytes ser 5 usec deser 1 usec
...(Please go to [source repo](https://github.com/Daylily-Zeleen/GUS-Godot-Universal-Serializer-2.0) to see full result.)
Changelog for version v2.1.9
No changelog provided for this version.