Quick answer: Chunk large payloads in 32KB pieces with seq id. Reassemble on receiver.
RPC sends a 200KB savegame. Peer disconnects. ENet packet too large.
The Fix
@rpc("authority", "reliable")
func send_chunk(seq: int, total: int, data: PackedByteArray):
chunks[seq] = data
if chunks.size() == total:
var full = PackedByteArray()
for i in total:
full.append_array(chunks[i])
on_complete(full)
func send_big(payload: PackedByteArray):
var chunk_size = 30000 # 30KB safe
var total = ceil(payload.size() / float(chunk_size))
for i in total:
var slice = payload.slice(i * chunk_size, (i + 1) * chunk_size)
send_chunk.rpc(i, total, slice)
Each chunk fits within ENet limit. Receiver reassembles in order via seq id.
Verifying
200KB save replicates. Peer stays connected. Without chunking: disconnect on send.
“Chunk + reassemble. Peer survives.”
Related Issues
For Synchronizer property, see sync. For RPC silent, see RPC silent.
Chunk. Reassemble. Big payload.