Repository navigation
v0.23.1
Allocation-pressure overhaul on the server hot path + ushort MethodId-only wire (service/method/version strings removed end-to-end) + refreshed compatibility negotiation. Wire-breaking on both axes: byte[]? → ReadOnlyMemory<byte> and the method-addressing string triple gone.
Highlights:
- Pool-backed broadcast payloads —
PooledPayload+PooledPayloadRegistry(silo-scoped, ref-counted). DI-drivenPooledPayloadOptions(default OFF). Cluster-singleton coordinator grain assigns uniqueSiloIdper silo. GrainScopedSerializer— per-grain scratch buffer;IMetaSerializer.Pack<T>(T)returnsReadOnlyMemory<byte>over pool-rented memory. Primitive-return cache (DispatchResult.True/False/Int/Void) skips serialization entirely.ushort MethodIddispatch — flatswitch (methodId)jump table replaces nested string/version switches.GameMethodIdsconst table per assembly. Force-patch refcounts indexed byMethodId(~200 B vs ~6 KB per entity at 100 methods).- Compatibility negotiation —
MetaClientOptions.ClientSignature,MetaTransportOptions.RequireClientSignature, two-phase handshake.MetaConnectionHandlerrejects un-negotiated clients on RPC/Query/Signal. - Fixes — cross-entity broadcast filter on outer-caller's client; CrossOptimistic broadcast race with third-party mutators; SessionManager pool-ref leak paths on transport drop; cluster-wide signature dedup under stress; Newtonsoft
RomByteJsonConverteron Unity HTTP polling.
References:
- docs/ARCHITECTURE.md §4.6 — hot-path allocation strategy
- docs/ARCHITECTURE.md §4.7 — wire method addressing
- docs/GUIDE.md — opt-in pool config, serializer contract
- SharedMeta-AI.md — AI-assistant context