UDP nie gwarantuje, że dany pakiet został faktycznie otrzymane, więc kodowanie cokolwiek przekazać jako „różnica w ostatniej chwili” jest problematyczne - nie można wiedzieć że odpowiednik ma ten sam pomysł co ty o co "ostatnim razem" był. Zasadniczo będziesz musiał skomponować pewien nadmiar na UDP, aby sprawdzić, jakie pakiety zostały odebrane (oznaczając każdy pakiet unikalnym identyfikatorem) - każdy, kto próbował iść tą trasą, zgodzi się, że częściej niż ty znajdziesz się więcej lub mniej powielania infrastruktury przesyłania strumieniowego TCP na górze UDP ... tylko najprawdopodobniej nie jest tak solidna i dobrze rozwinięta (choć czasami czasami można skorzystać z bardzo szczególnych cech swoich ładunków, aby uzyskać skromną przewagę nad dobrym stary TCP).
Czy transmisja musi być jednokierunkowa, z nadajnika do odbiornika? Jeśli tak jest (tzn. Odbiorca nie może wysyłać potwierdzeń lub retransmisji), to naprawdę niewiele można zdziałać w tym kierunku. Jedna rzecz, która przychodzi na myśl: jeśli odbiornik nie jest zsynchronizowany przez jakiś czas, może wysłać dwa rodzaje pakietów - jeden z pełnym obrazem aktualnej wartości struktury i identyfikacją unikalny znacznik, który ma być wysłany co najmniej na każde (powiedzmy) 5 minut (tak realistycznie odbiornik może być zsynchronizowany przez maksymalnie 15 minut, jeśli pominie dwa z tych "dużych pakietów"); jeden z aktualizacją (różnicą) z ostatniego "dużego pakietu", w tym znaczący unikalny znacznik dużego pakietu i (np.) zakodowana w czasie wersja XOR, o której wspomniałeś.
Oczywiście po przygotowaniu wersji z zakodowaną długością, serwer porówna jego rozmiar z rozmiarem całej struktury, a jedynie przesłać pakiet typu delta, jeśli oszczędności są znaczne, w przeciwnym razie może dobrze wysłać duży pakiet nieco wcześniej niż potrzeba (zyskuje na niezawodności). Otrzymany będzie śledzić ostatni otrzymany unikalny znacznik dużego pakietu i stosować tylko delty, które go dotyczą (pomaga uniknąć brakujących pakietów i pakietów dostarczonych poza kolejnością, w zależności od tego, jak wyrafinowane chcesz zrobić klienta).
Konieczność zmiany wersji & c, w zależności od tego, co dokładnie masz na myśli (czy nadawcy i odbiorcy z różnymi pomysłami na temat wyglądu układu w układzie C będą musieli regularnie komunikować się, w jaki sposób uzgadniają, jakie wersje są znane obu? itd.), doda jeszcze całego wszechświata komplikacji, ale to jest naprawdę inne pytanie, a twoje podstawowe pytanie, które zostało streszczone w tytule, jest już wystarczająco duże ;-).
Jeśli możesz pozwolić sobie na sporadyczne meta-wiadomości od odbiornika z powrotem do nadawcy (pakiety lub prośby o ponowne wysłanie), to w zależności od różnych parametrów liczbowych w grze możesz zaprojektować różne strategie. Podejrzewam, że gacki musiałyby być dość częste, by zrobić dużo dobrego, więc prośba o ponowne wysłanie dużego pakietu (albo konkretnie zidentyfikowanego, albo "cokolwiek masz, co jest najświeższe") może być najlepszą meta-strategią do wybrania przestrzeni opcji (które w przeciwnym razie grozi wybuchem ;-). Jeśli tak, to nadawca może być błogo nieświadomy jakiejkolwiek strategii, której używa odbiorca, aby zażądać ponownej wysyłki dużych pakietów, i możesz eksperymentować po stronie odbiorcy z różnymi strategiami bez konieczności ponownego wdrażania nadawcy.
Trudno zaoferować o wiele więcej pomocy bez pewnych szczegółów, tj. Przynajmniej numery stanowisk dla wszystkich parametrów liczbowych - wielkości pakietów, częstotliwości wysyłania, jak długo jest tolerowany, aby nadawca nie był zsynchronizowany z odbiornik, pakiet parametrów sieciowych itp. Ale mam nadzieję, że ta nieco ogólna analiza i sugestie nadal będą pomocne.
Myślę, że to zależy od tego jak dużo dane będą się zmieniać (1%? 10%? 50%?) i jak regularne są zmiany (czy są w tych samych miejscach czy wszędzie?) –
Po prostu ciekawy: dlaczego struktura C w przeciwieństwie do używania czegoś takiego jak XMLRPC, SOAP lub inny komunikator mechanizmy unication takie jak DBUS? Co się stanie ze strukturą, kiedy pojawi się po drugiej stronie? – aneccodeal