Właśnie skończyłem czytać High-Latency, Low-Bandwidth Windowing in the Jupiter Collaboration System i przeważnie śledziłem wszystko aż do części 6: globalna konsystencja. W tej części opisano sposób, w jaki opisany w artykule system można rozszerzyć tak, aby był dostępny dla wielu klientów podłączonych do serwera. Jednak wyjaśnienie jest bardzo krótkie i zasadniczo mówi, że system będzie działał, jeśli serwer centralny przesyła jedynie komunikaty klienta do wszystkich innych klientów. Naprawdę nie rozumiem, jak to działa. Jaki wektor stanu zostanie wysłany w wiadomości wysyłanej do wszystkich innych klientów? Czy serwer utrzymuje osobne wektory stanu dla każdego klienta? Czy zachowuje osobną kopię widgetów lokalnie dla każdego klienta?W jaki sposób współpraca w czasie rzeczywistym z wieloma klientami działa w systemie wykorzystującym transformacje operacyjne z serwerem centralnym?
Prostym przykładem, jaki mogę wymyślić, jest ta konfiguracja: wyobraź sobie klienta A, serwer i klienta B z klientem A i klientem B połączonymi z serwerem. Aby rozpocząć, wszystkie trzy mają obiekt stanu "ABCD". Następnie klient A wysyła komunikat "wstaw znak F w pozycji 0" w tym samym czasie, gdy klient B wysyła komunikat "wstaw znak G w pozycji 0" do serwera. Wydaje się, że po prostu przekazanie wiadomości klienta A do klienta B i na odwrót w rzeczywistości nie obsługuje tej sprawy. Co dokładnie robi serwer?
Dla potomności, w przypadku, gdy nie było to jasne: serwer działa jako "klient proxy" między "A" i "B", tłumacząc op od 'A' (' a') do 'a'' i * naprzód * op' a'' do 'B' (tak jakby sam serwer wygenerował operację). Serwer posiada kopie obu kolejek operacji "A" i "B", podczas gdy 'A' i' B' mają tylko kopię kolejki operacji serwera. Aby uzyskać dalsze informacje, sprawdź * Kontrola współbieżności w systemach Groupware * i * A Próba na kontrpropozycji do rozproszonej transformacji operacyjnej i poprawionego algorytmu komunikacji punkt-punkt *. – mzhang