[Delphi] IdUDP* laguje na LANie

0

Szukałem wszędzie, ale nie mam pojęcia o co chodzi...

Problem dotyczy mojej gry internetowej.

Na niektórych kompach uruchomienie serwera powoduje lagi UDP (protokół TCP za to działa sprawnie), z tym, że ów UDP pochodzi z pakietu Indy. Nie jest to przeciążenie łącza, ponieważ na LANie również są lagi, ba, nawet na serwerowym kompie wpisanie 127.0.0.1 nie wiąże się z pingiem równym 0 (jak to na większości komputerów jest), tylko ok. 45ms, do tego jakby "zjadanie" pakietów UDP. Dodam również, że łączenie się na serwer dedykowany umieszczony w Gdańsku nie sprawia problemów i ping wynosi wówczas od 20 do 30ms, a gra przebiega płynnie.

Co może być przyczyną "zjadania" pakietów w IdUDPServer i -Client? Dodam, że inna gra korzystająca z UDP (nie Indy) chodziła idealnie na LANie.

Moja gra używa do TCP socketów Delphi, z którymi nie ma problemów, jednakże właśnie na nich ping wynosi ok. 45 ms (powinien wynosić 0), jednak testy błędów nie wykryły. Tylko używany do gry IdUDPServer gubił pakiety i ich części docierały poszatkowane do klientów (powodowały błędy, gdybym nie przechwytywał wyjątków, gra zwiesiłaby się na amen).

Na moim komputerze jest OK... Nie wiem, o co chodzi. W Sieci niczego nie ma na ten temat, albo źle szukałem (choć jestem dość zdesperowany).

Jestem pewien, że to coś z Indy, albo coś z zewnątrz blokuje grę... Tylko ta druga, sprawdzana gra nie-na-Indy działała dobrze... Ech, może ktoś miał podobny problem?

0

przeczytałem dwa razy i nie do końca wiem ocb :/

BTW wiesz oczywiście, że UDP nie gwarantuje w żaden sposób, że pakiet dojdzie ani to w jakiej kolejności pakiety dojdą do celu, w przeciwieństwie do TCP.

0

Hmm... Wybacz, to pokręcone.

To jak mi wytłumaczysz, że z Warszawy do Gdańska UDP chodził pięknie, a na LANie występowały ZAWSZE błędy?

Wytłumaczę natomiast jeszcze raz ten problem:

  1. Hostując dedykowany na jednym komputerze łączę się przez 127.0.0.1.

  2. Działa, ale mam ping 45. A to IP powinno mi zagwarantować ping 0-8 (mam tak u siebie).

  3. Inni się łączą (przez LAN) i są straszne lagi na protokole UDP - zbyt często gubi on pakiety (gra jest uodporniona da sporadyczne gubienie, ale tutaj po prostu dociera 50% pakietów, w dodatku z kilkusekundowym opóźnieniem).

  4. Na innym LANie problem nie występował i ping wynosił u wszystkich od 0 do 8 ms.

  5. Połączenie Warszawa-Gdańsk z tej "wadliwej" kafejki: ping 20-30 ms, 100% poprawności TCP, 99% poprawności UDP - grało się idealnie.

Już rozumiesz?

0

no to

  1. lan w tej kafejce (bo wnioskuje, że o kafejkę chodzi) jest zwalony (któraś karta sieje jakieś bzdury, ktoś próbuje się "nieładnie bawić", kable są źle zaciśnięte, itd, itp)
  2. na kompach jest syf - wirusy, ogólny bałagan

Jeśli dobrze działa w innym lanie oraz w internecie, dodatkowo pisałeś, że ogólnie ten jeden lan źle działą (słabe pingi) to wine upatrywał bym w samej sieci i/lub windowsach niż w programie

0

To jak wytłumaczysz mi fakt, że taki Gusanos działał idealnie? Pingi 0, lagów brak. A to ten sam protokół.

0

a skąd ja mam wiedzieć? Nie znam ani konfiguracji tamtej sieci ani nie wiem nic o samych kompach, nie wiem nic o programie, który masz i który działa ale nie działa. Mam zgadywać? wróżyć? strzelać? Co Ci mam doradzić? Co Ty byś doradził komuś, kto przyszedł by do Ciebie z takim pytaniem?

Są dwie możliwości

  1. winna jest sieć (ew. same końcówki)
  2. winny jest program
    trzeciej możliwości nie widzę więc na początek zrób testy w jakimś innym lanie a potem zamień indy (które zawsze uważałem za badziew) na coś innego, np. synapse.
0

Nie wiem, ale może ktoś miał podobny problem i będzie wiedział.

Sprawdzę ten synapse, dsa;

0

a dlaczego Od razu UDP... może TCP! przecież (ort!?) TCP niczym się nie różni... a gwarantuje "przesył poskładanych" danych, tak więc widzisz nie ma chyba sensu niczego rbi na UDP... przynajmniej ja bym nic nie robił w ten sposób ;]

0

UDP z racji swojej budowy jest dużo szybsze ale też nie gwarantuje dostarczenia pakietu ani kolejności w jakiej one przychodzą

0

Właśnie wybrałem UDP z racji o wiele mniejszych wymagań przepustowości, ponadto jest on o wiele szybszy. I skoro działa bezproblemowo przez Internet, to nie wiem, czemu akurat miałbym zmieniać wszystko na TCP, które do szybkiej strzelanki imho się trochę mniej nadaje.

Na http://seasoft.victorygames.com.pl znajduje się opis i filmik z tej gry (BEU Net 2007).

Poza tym mówiłem - na TCP jest o tyle dobrze, że wszystko na tym felernym LANie jakoś dociera, tylko jest ping... 45ms. UDP wówczas po prostu się gubi. I nie chcę, by ktoś więcej polecał mi przejście z UDP na TCP, bo to wówczas nic dobrego nie przyniesie, skoro na połączeniu Gdańsk-Warszawa można grać niemal jak na poprawnym LANie (bez błędów) z 20-30 ms pingiem.

Ba, wczoraj na mój własny serwer (Warszawa) wszedł... Amerykanin (poznałem po hoście) z pingiem 140, wówczas dało się grać bez problemów, UDP nie gubiło pakietów jak na wspomnianym felernym LANie.

PS: Filmik z gry na podanej przeze mnie stronie przedstawia rozgrywkę sieciową rozegraną przez graczy z różnych miejsc Polski - widzicie zatem, że lagi są minimalne nawet w większych akcjach.

Może coś w kodzie serwera popsułem, że na słabszych maszynach się sypie... Sprawdzę, ale nie sądzę, by to przyniosło jakieś skutki. Wprowadzę tego synapse, ale jeżeli i to nic nie przyniesie, to nie pozostaje mi nic innego, jak rozłożyć ręce i krzyknąć w stronę nieba, na cały głos: "WTF!?" ;).

0

no to masz wybór :D
albo słaby ping i TCP, albo gubiące się pakiety w UDP ;D

PS. z tym WTF?! to nawet fajnie ci to wyszło ;

PSS. Fajną gierke zrobiłeś ;] naprawde fajną

0

Dzięki, dzięki. Już ją kończę powoli, to koniec z seria BEU w ogóle.

A co do problemu to na razie go oleję, bo nigdy tej gry nie skończę. Potem się zastanowimy.

Whatever, dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1