Wpis z mikrobloga

Czy możliwe jest, że wysłane sekwencyjnie reqeuesty w kolejności 1, 2 (bez czekania na response) dojdą do serwera w odwrotnej kolejności 2, 1? Chodzi mi o sytuację że kolejne requesty muszą zawierać kolejne identyfikatory i nie mogą dotrzeć do serwera w innej kolejności. Czy w takim wypadku jedynym rozwiązaniem jest wysłanie drugiego requesta po uzyskaniu odpowiedzi z pierwszego? Czy może jest jakaś inna możliwość, tak aby uzyskać jak największą możliwą przepustowość?

#programowanie
  • 7
@Nullek: zależy jak napisany serwer, jak napisany klient i jaki to protokół. Jeśli używają jednego połączenia TCP, to kolejność będzie zachowana.

Możliwość zachowania wysokiej wydajności bez zmiany kolejności komunikatów i bez czekania na odpowiedź oczywiście istnieje. Poczytaj o pipelining w HTTP.
@Krolik: o właśnie teraz widzę że pipeline http to słowo klucz. Wiedziałem że ruch http zwykle jest przez TCP, ale jest zwykle w obrębie tylko jednego requesta, więc mimo TCP to co myślałem mogło mieć miejsce (oczywiście chodzi mi o typowe REST API)

Bardzo dziękuję za pomoc ( ͡° ͜ʖ ͡°)

A mam jeszcze jedno pytanie, czy stosując http pipeline, mam pewność że server obsłuży żądanie z
@Nullek: jeżeli masz jedno połączenie, to serwer musi odpowiadać na tym połączeniu dokładnie w tej samej kolejności, takie jest podstawowe wymaganie w HTTP/1.1. Jeśli serwer by pomieszał odpowiedzi to byłby to błąd w implementacji protokołu. Oczywiście może przetworzyć zapytania równolegle, ale odpowiedzi musi wysłać w odpowiedniej kolejności. W HTTP/2 dodatkowo istnieje mechanizm multipleksowania wielu strumieni wirtualnych na jednym połączeniu i odpowiedzi należące do różnych strumieni mogą się mijać. Czyli jeśli chcesz
@Krolik: właśnie myślę głównie o tym ze po dotarciu do serwera, w samym serwerze mogą zostać zrownoleglone i jeden wyprzedzić drugi i spowodować error.

Myślałem nad rozwiązaniem takich batchy i ewentualnie jeśli by któryś zwrócił error z takiego batcha to powrót do ostatniego id który był poprawny. Ale zakładając że nie znam implementacji serwera. To żeby mieć stuprocentową pewność że zapytania nie zostana zrownoleglone to jednak powinienem czekać na response?