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.