Kompendium: Lag, split, wisząca sesja, penalty points
Napisane: środa, 15 czerwca 2016, 17:04
Lag, split, wisząca sesja i „penalty points”
Lag
Lag[1] (inaczej latencja lub opóźnienie) jest niekorzystnym zjawiskiem nielubianym przez graczy w quizbota, a przede wszystkim przez uczestników premier quizowych. Jest to opóźnienie pomiędzy chwilą wysłania wiadomości np. odpowiedzi na pytanie przez zawodnika, a odebraniem jej przez drugą osobę lub reakcją skryptu na nią. Powodów zaistnienia lagów może być kilka.
IRC jest siecią połączonych ze sobą serwerów. Każdy komunikat wysłany przez użytkownika trafia najpierw do serwera, poprzez który os sam połączył się z IRC-em, a następnie rozsyłany jest do każdego z serwerów, z których korzystają obecni na kanale pozostali użytkownicy, by również oni mogli go zobaczyć. Dodatkowo po drodze występują także regionalne serwery-węzły, tzw. huby, pod które podpięte zwyczajowo są wszystkie serwery z danego kraju, a całość opiera się o normalną infrastrukturę Internetu. Uproszczony schemat ścieżki, którą pokonuje wszystko co napiszemy:
- Kod: Zaznacz cały
Twój (Internet) serwer IRC, z (Internet) serwer IRC (Internet) serwer Quizbota lub
komputer <-----//-----> którym się łączysz <-----//-----> odbiorcy <-----//-----> komputer osoby
^ | puszczającej quiz
| |
inny gracz z tego <-----//---' `--> inny serwer <-----//-----> jeszcze inny gracz
samego serwera IRC
Jest to dość długa ścieżka, która sama z siebie generuje opóźnienia związane z połączeniami (często międzynarodowymi) oraz samym przetwarzaniem komunikatów w oprogramowaniu serwerów. Standardowo utrzymują się one w granicach do jednej, dwóch sekund, choć zazwyczaj jest to kilkaset milisekund. Podczas zwyczajnych rozmów nie mają one większego znaczenia, ale w trakcie dynamicznej gry mogą prowadzić do nieuznawania odpowiedzi — u gracza wygląda to tak, jakby on pierwszy odpowiedział (bo program użytkownika wyświetla komunikat od razu po naciśnięciu entera), ale faktycznie liczy się to, co widzi quizbot lub skrypt quizowy u odbiorcy. A przecież w tym samym czasie odpowiadają także inni.
Dlatego też na kanałach quizowych zwykle panują zasady, żeby quizbot lub osoba przeprowadzająca quiz łączyła się z regionalnym serwerem kraju, z którego pochodzi większość bywalców. Ponadto sami gracze powinni w miarę możliwości łączyć się z IRC-em poprzez ten sam serwer lub z geograficznie mu najbliższym (pomóc może polecenie „/whois” wyświetlające używany adres serwera oraz polecenie „/map” pokazujące drzewko połączeń serwerów[2]), gdyż reklamacje z powodu lagów praktycznie nigdzie nie są uznawane.
O ile na lag związany z siecią IRC użytkownicy nie mają (teoretycznie) wpływu, o tyle on sam może być też spowodowany nadmiernym przeciążeniem własnego łącza internetowego (np. programy P2P, intensywne korzystanie z Internetu, streaming) lub jego usterką, bądź przeciążeniem komputera (np. gry, odtwarzanie filmów, archiwizowanie danych) w tym samym czasie. Przede wszystkim tyczy się to osoby przeprowadzającej quiz, dlatego zwykle oczekiwane jest, by nie wykorzystywała ona w trakcie quizu komputera do innych celów.
Split
Zaobserwowanie szybko narastającego opóźnienia lub „przytkania”, czyli nagłego braku napływu nowych wiadomości może zwiastować nadchodzący „split” (zwany także „netsplitem”)[3], który jest zerwaniem połączenia pomiędzy serwerami i rozdzieleniem segmentów sieci IRC. Efektem tego jest nagłe opuszczenie kanału przez grupę osób (jako powód wyjścia podane są nazwy dotkniętych serwerów), a po jakimś czasie ich wspólny powrót. Splity zazwyczaj trwają od kilku do kilkunastu minut, choć w przypadku przerw serwisowych serwerów potrwać mogą nawet kilka godzin. Spowodowane mogą być także atakami typu DDoS.
W przypadku skryptów quizowych limitujących czas na odpowiedź, takich jak: „Milionerzy”, „Familiada” czy „AntyGoogler” prowadzić to może do popsucia rozgrywki (quiz trwa dalej, ale brak jest części graczy), o ile nie zostanie użyte polecenie pauzujące grę na czas splitu. M.in. z tego powodu zalecane jest właśnie korzystanie przez wszystkich z tego samego serwera podczas quizów.
Będąc po drugiej stronie splitu można próbować połączyć się z innym serwerem, by powrócić do zabawy, aczkolwiek w przypadku sieci IRCnet nick jest chroniony na czas splitu lub przez 30 minut (DCTL), zależy co nastąpi szybciej (komunikat „Nick/channel is temporarily unavailable”). W ten sam sposób chronione są też kanały. W przypadku zakończenia długotrwałego splitu, jeśli po obu stronach znajdują się osoby o tym samym nicku, to dochodzi do kolizji nicków i nicki obu osób (lub tej samej z jej poprzednim nickiem) zmieniane są przez serwery na ich UID („user id”, tak zwany „/nick 0”) i w podobny sposób czasowo blokowane.
Dobrą praktyką jest, by osoba puszczająca premierę quizową, w chwili wystąpienia splitu, w miarę dostępności skorzystała z polecenia pauzującego rozgrywkę, bądź nawet wyświetliła bieżącą punktację, zakończyła quiz i wznowiła od kolejnego pytania już po zakończeniu splitu.
Wisząca sesja
Zauważenie nagłej ciszy na kanale może zwiastować także awarię własnego połączenia z serwerem IRC, ale nie musi się to wiązać z natychmiastowym rozłączeniem. Czasem jeśli utracone zostanie połączenie lub serwer nie zauważy, iż my sami się rozłączyliśmy, to nasz nick może wciąż pozostawać widoczny na kanale („wisieć”), nawet jeśli powrócimy na sieć. Proszenie operatorów kanału o wykopanie takiej wiszącej sesji nie przyniesie efektu w postaci zwolnienia nicka. Niestety należy poczekać, aż sieć sama zwolni zasoby, co nastąpi po ok. 5 minutach — stąd charakterystyczny komunikat „Ping? Pong!”, za pomocą którego sieć sprawdza czy połączenie jest aktywne. Dla przejrzystości przyjęło się, że użytkownicy łącząc się ponownie dodają za nickiem podkreślenie („_”, co jest zwykle domyślną konfiguracją programów) lub numer.
Penalty points
W sieci IRCnet istnieje dodatkowo specjalny algorytm wprowadzający „penalty points” (punkty karne), którego działanie przypomina zachowaniem lagi. Został on zaimplementowany m.in. w celu zwalczania tzw. floodów[4], czyli znacznych ilości tekstu wysyłanych na kanały przez złośliwych użytkowników, aby wywoływać zamieszanie oraz do utrudnienia wrogich takeoverów. Jego działanie polega na przyznawaniu określonej liczby punktów karnych za każdy rodzaj komunikatu wysyłanego do serwera (zwykłe wiadomości, zmiany topica, trybów, kopnięcia itd.) oraz jego długość, a każdy z użytkowników ma przypisany specjalny indywidualny licznik. Pula punktów każdej z podłączonych osób redukowana jest co sekundę o jeden punkt. Po przekroczeniu pewnego progu (10 PP) serwer zapamiętuje (kolejkuje) i przestaje przesyłać dalej kolejne komunikaty od użytkownika, dopóki nie zredukują się jego punkty karne lub ilość przesłanych danych zapełni bufor i użytkownik zostanie rozłączony od sieci za flood (komunikat „Excess flood”).
Dla nadmiernie i zbyt szybko wysyłającej osoby własne komunikaty pojawiają się zawsze natychmiast (specyfika działania programów do czatowania) i nie jest on świadom nałożonej kary, ale dla pozostałych osób wygląda to jak tradycyjny lag. Sytuacja taka może mieć miejsce na przykład podczas pytań quizowych o liczby lub daty. Wówczas podając kilkanaście odpowiedzi jedna zaraz po drugiej — u odpowiadającego wyświetlą się one od razu po wciśnięciu entera, ale na kanał i do innych faktycznie trafiać wciąż mogą nawet w trakcie kolejnego pytania.
Skrypty quizowe, które wysyłają często i dużo wiadomości na kanał jak np. „Familiada” mogą ulegać opóźnieniom właśnie z tego powodu. Problemem mogą być także niektóre polecenia kanałowe (na przykład polecenie wyświetlające ranking), które o ile nie zostały odpowiednio zabezpieczone mogą być nadużywane lub złośliwie wykorzystywane do lagowania puszczającego quiz. Tutaj z kolei z punktu widzenia prowadzącego quiz pytanie wyświetli się normalnie i czas na odpowiedź będzie płynął (np. „Familiada”, „Milionerzy” czy „AntyGoogler”), ale u innych pytanie jeszcze się nie pojawiło (pojawi się linijka po linijce co kilka sekund). Jeśli taka sytuacja ma miejsce prowadzący powinien dostosować opóźnienia pomiędzy kolejnymi pytaniami.
[1] Oficjalne wyjaśnienie terminu „lag” dla sieci IRCnet znajduje się tutaj: link, a ogólne także tutaj: link.
[2] Skorzystać można też z tej listy (widok z serwera man-da.de lub wybranego).
[3] Oficjalne wyjaśnienie terminu „split” dla sieci IRCnet znajduje się tutaj: link, a ogólne także tutaj: link.
[4] Oficjalne wyjaśnienie terminu „flood” dla sieci IRCnet znajduje się tutaj: link, a ogólne także tutaj: link.