Skip to content

Switching to manual synchronisation #130

@Protonull

Description

@Protonull

Given that the synchronisation process is so expensive, I think it'd be wise to switch to manual synchronisation, at least by default. Currently there are various strategies to try and reduce the impact by, for example, persisting sync connections even if the player has left the game server. Having the protocol itself be an increasing exchange of elaboration definitely helps too, but I wonder about the implications of multi-dimension support (#17): could a player exhaust a server by repeatedly changing dimensions? This needn't be deliberate either as Brunsvik and other places have public nether portals that see regular use. Manual synchronisation would be a significant refactor though: the current system assumes the imminent synchronisation upon joining a game server.

What I suggest is updating the client to have an equivalent database of chunk data. Each chunk stored in the database will be tagged with its origins: whether through exploration or synchronisation. When you initiate a synchronisation, it will only consider chunks originated through exploration to prevent the cross-contamination of sync servers. This would then allow servers to request chunk data from the client, making the synchronisation process more akin to rsync than a delta-download.

Having this database would then also allow players to manually re-render their mapping mods: if you're using CivVoxelMap and want to switch to JourneyMap, you can just do that without needing an over-the-network resync, because you already have the information stored locally.

I do think it should be possible to opt-in to automatic synchronisation, but servers should be able to ignore this. Likewise, be able to put a cooldown on manual synchronisation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions