I just finished reading High-Latency, Low-Bandwidth Windowing in the Jupiter Collaboration System and I mostly followed everything until part 6: global consistency. This part describes how the system described in the paper can be extended to accomodate for multiple clients connected to the server. However, the explanation is very short and essentially says the system will work if the central server merely forwards client messages to all the other clients. I don't really understand how this works though. What state vector would be sent in the message that is sent to all the other clients? Does the server maintain separate state vectors for each client? Does it maintain a separate copy of the widgets locally for each client?
The simple example I can think of is this setup: imagine client A, server, and client B with client A and client B both connected to the server. To start, all three have the state object "ABCD". Then, client A sends the message "insert character F at position 0" at the same time client B sends the message "insert character G at position 0" to the server. It seems like simply relaying client A's message to client B and vice versa doesn't actually handle this case. So what exactly does the server do?
A
andB
, translating an op fromA
(a
) intoa'
, and forwards opa'
toB
(as if the server itself generated the op). The server, then, has copies of bothA
andB
operation queues, whereasA
andB
only have a copy of the server operation queue. For further reading, check out Concurrency Control in Groupware Systems, and A Counterexample to the Distributed Operational Transform and a Corrected Algorithm for Point-to-point Communication. – Proboscidean