Opublikowano 11 Listopada 20232 l Cześć wszystkim, Przedstawiam przykładowe rozwiązanie dotyczące problemów z połączeniem serwera. Po krótce, co to za błąd? Problem ten pojawia się, gdy gracz próbuje nawiązać połączenie z serwerem, ale serwer nie odpowiada. W takiej sytuacji gracz otrzymuje komunikat "Zostaniesz połączony z serwerem", który wisi cały czas. Problem ten może również występować podczas teleportacji, w wyniku czego gracz zostaje zatrzymany i nie może dalej grać. Rozwiązanie: Wdrożymy specjalny mechanizm, który podczas problemów sieciowych z serwerem będzie nawiązywał kolejną próbę połączenia, co 1 sekundę. Takie rozwiązanie zostało już opublikowane na innym forum przez Kena i ma spore wady. Takie podejście, będzie generowało dodatkowe obciążenie sieci. Wdrożymy więc strategie nazywaną exponential backoff, która pozwoli na bardziej efektywne zarządzanie ponownymi próbami połączenia w przypadku błędów. W tej strategii, czas oczekiwania między kolejnymi próbami jest stopniowo zwiększany, co redukuje ryzyko nadmiernego obciążenia serwera. Użyłem tu również chrono do obsługi limitu czasu połączenia zamiast time(NULL), chrono umożliwia większą precyzję. Implementacja: 📂 Lokalizacja pliku: 'EterLib -> NetStream.cpp' 🔍 Szukaj Tylko zalogowani Zaloguj się, aby wyświetlić chronioną treść Ten post zawiera treści dostępne tylko dla członków. Zaloguj się lub utwórz konto, aby odblokować całą zawartość tego posta. Zaloguj się Utwórz konto ♻️ Zamień 📂 Lokalizacja pliku: 'EterLib -> StdAfx.h' 🔍 Szukaj ➕ Dodaj:
Opublikowano 17 Listopada 20232 l Autor Sprawdź definicję funkcji ::Connect w 'NetStream.h' powinieneś mieć tak: CKod został skopiowanybool Connect(const CNetworkAddress& c_rkNetAddr, int limitSec = 3);
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto