In my experience, physical vs logical client/server are confusing at best. I've been using my own terminology for a while; it has made things a lot easier to explain and think about:
- Physical client → Client
- Logical client → Replica
- Logical server → Primary
- Physical server → Server
Primary/replica are mainly used in the context of distributed systems and databases, but hear me out here.
The physical server holds multiple logical servers, as when talking about a logical server you generally mean the world itself. Currently they all run on one thread, but they are separate in virtually every other way. As such I suggest renaming the logical server to a primary, as it is an authoritative copy of a world.
Meanwhile, the physical client may hold primaries and always holds a replica. Some others I've proposed this to have argued that since the client's replica is an incomplete slice of the world, it's not a proper use of the term. However, in distributed systems it's uncommon to have a complete replica. Generally you have a replica of a shard, not the entire system (unless it's a small system).
Since the client's copy of the world is non-authoritative, and local changes are overwritten by the server, I suggest renaming the logical client to a replica.
Since both logical terms are replaced, this makes the physical prefix on the client and server redundant. As such I suggest dropping the prefix entirely. This also brings these terms in line with the Side
enum, and no longer will the note that Side
refers to physical side be needed.
I'm posting this as an issue rather than a PR as I mainly wanted to start a discussion, and there's no One True Way to update the docs to these terms.
In the event this does become the official terminology, it'd also be good to update the oft-contested field isRemote
to isReplica
. Bonus: isRe still completes properly.
EDIT: After some discussions in IRC I'm a lot less convinced this is as clear as I thought, but I'm leaving the issue open if anyone else has other ideas.