Pridedate leidėją prie išimčių sąrašo, atsisiuntimas šokteli nuo lėto prie greito, o rungtynės vis tiek nusileidžia nutolusiam serveryje. Niekas nesugedę. Leidėjas ir žaidimas yra du procesai su dviem lizdų rinkiniais, ir vieno išskyrimas nieko nesako apie kitą. Atsisiuntimas pagreitėjo, nes atsisiuntimas buvo leidėjo srautas; rungtynės yra kieno nors kito ryšys, atidarytas vykdomojo failo, kurio jūsų taisyklė niekada nematė.

Vienas diegėjas, daug procesų

Šiuolaikinė žaidimų programinė įranga yra mažas žvaigždynas. Yra klientas, kuris jus prijungia, atnaujintojas, kuris ištraukia turinį, leidėjas, kuris paleidžia žaidimą, ir žaidimo vykdomasis failas, kuris pats gali sukurti antrą procesą apsaugai nuo sukčiavimo arba rungtynių suderinimo sluoksniui. Kiekvienas jų gali turėti savo ryšius su savo paskirties vietomis.

Išimčių taisyklė paprastai įvardija vieną jų. Kurį įvardija, visiškai priklauso nuo identifikatoriaus, kurį palaiko VPN klientas, ir tai dalis, kurią naudotojai retai tikrina. Kai kurie klientai sutapatina vykdomojo failo kelią, kai kurie paketo ar bundle identifikatorių, o kai kurie proceso pavadinimą, kurį gali dalytis du nesusiję dvejetainiai failai. Perskaitykite taisyklę prieš procesų sąrašą, nes taisyklė riboja net tai, ką galite išreikšti.

Taigi simptomas nėra „padalintas tunelis sugedęs“. Jis yra „taisyklė apima procesą, kuris nėra tas, kuris perduoda man svarbų srautą“, o tai daug siauresnis ir daug lengviau pataisomas teiginys. Kai taip pasakote, kitas žingsnis nustoja būti spėjimu.

Raskite procesą, kuriam priklauso rungtynių ryšys

Paleiskite žaidimą, įeikite į rungtynes ir pažiūrėkite, kam priklauso lizdai, o ne kas rodoma ekrane. „Windows“ procesų sąrašas ir lizdų užklausa kiekvienam procesui atsako dviem komandomis:

Get-Process | Where-Object { $_.ProcessName -match 'launcher|game|client' } | Select-Object Id,ProcessName,Path
Get-NetTCPConnection -State Established | Select-Object OwningProcess,RemoteAddress,RemotePort | Sort-Object OwningProcess

Antroji komanda išspausdina proceso ID, o ne pavadinimą, todėl sujunkite abu išvestis pagal ID. Eilutė, kurios ieškote, yra ta, kurios nuotolinis adresas priklauso žaidimo tarnybai, o ją turintis procesas yra vykdomasis failas, kurį jūsų taisyklė turi įvardyti.

„Linux“ tas pats klausimas reikalauja vienos komandos kiekvienam lizdo tipui, ir verta patikrinti abu, nes rungtynių ryšys gali būti UDP, o visa kita TCP:

ss -tunp state established | grep -i game
ss -tunp | awk 'NR==1 || /udp/'

Jei žaidimas veikia konteineryje arba suderinamumo sluoksnyje, rastas procesas gali būti shim, o ne jūsų įdiegtas dvejetainis failas. Tokiu atveju svarbus identifikatorius yra tas, kurį mato klientas, ir tai gali būti shim kelias, ir joks originalaus failo redagavimas tam neturės įtakos.

Sutapatinkite identifikatorių, kurį palaiko jūsų klientas

Prieš ką nors pridėdami perskaitykite kliento dokumentaciją apie išimčių taisyklę. Trys įprasti modeliai elgiasi skirtingai, ir vienas jų yra spąstai.

IdentifierHow it behavesFailure mode
Executable pathMatches exactly the file at that pathBreaks when an update moves the binary
Process nameMatches any binary with that nameToo broad; catches unrelated software
Package or bundle idMatches a signed application groupMay include services you did not intend

Kelio taisyklės yra tiksliausios ir trapiausios. Leidėjo atnaujinimas, kuris perkelia vykdomąjį failą, palieka taisyklę rodančią į failą, kuris nebeveikia, ir simptomas grįžta niekam akivaizdžiai nepasikeitus. Paketo taisyklės tai atlaiko, ir jos taip pat gali tyliai apimti pagalbinius procesus, apie kuriuos niekada negalvojote, o tai patogu arba nerimą kelia priklausomai nuo pagalbininko.

Kad ir ką palaikytų klientas, nepridėkite įrašų kiekvienam rastam vykdomajam failui. Sąrašas, sudarytas bandymų ir klaidų būdu, kol viena sesija suveikė, negali būti peržiūrėtas, ir jis tyliai kaups išimtis nesusijusiai programinei įrangai. Įvardykite rastą procesą ir užrašykite, kam jis buvo skirtas.

Išbandykite rungtynėse, o ne atsisiuntime

Leidėjo atsisiuntimo greitis yra blogiausias įmanomas bandymas, nes jis tiksliai išnaudoja procesą, kuris jau buvo išskirtas. Naudokite tai, kas nepavyko, ir tikrinkite kelią, o ne paties žaidimo našumo rodinį:

ip route get 203.0.113.55
Get-NetTCPConnection -State Established | Where-Object RemotePort -eq 27015

Pirmajai komandai reikia adreso, į kurį išsprendė rungtynių serveris, o jį gali duoti žaidimo ryšio žurnalas arba jūsų klientas. Jei maršrutas įvardija fizinę sąsają, taisyklė veikia. Antroji parodo, ar sesija apskritai egzistuoja, o tai atskiria „išskirta, bet serveris neveikia“ nuo „neišskirta“.

Bandymo metu palaikykite fiksuotą regioną ir prieigos tinklą. Rungtynės, kurios kiekvieną kartą nusileidžia kitame duomenų centre, sukuria skirtingus adresus, ir galiausiai persekiosite judantį taikinį, o ne tikrinsite taisyklę. Du paleidimai su tuo pačiu adresu vertingesni nei dešimt su skirtingais.

Po kito atnaujinimo patikrinkite dar kartą

Kiekviena keliu pagrįsta taisyklė turi tinkamumo laiką, matuojamą pataisų ciklais. Kai žaidimas po mėnesio nustoja gerbti išimtį, pirmiausia patikrinkite, ar vykdomasis failas persikėlė, o antra, ar šalia nepasirodė naujas pagalbinis procesas.

Vieno kliento dokumentuotas programų išskyrimo modelis yra pagrįsta nuoroda, kaip aprašomos šios taisyklės, nors detalės skiriasi tarp produktų. Perskaitykite savąjį, užrašykite naudotą identifikatorių ir pažymėkite datą. Būtent šis įrašas paverčia paslaptį penkių minučių pataisymu kitą kartą, kai leidėjas išleis atnaujinimą.

Jei klientas tiesiog negali išreikšti reikiamos ribos, patvirtinta platesnė politika yra geresnė už neaprašytų išimčių krūvą. Platu ir suprantama nugali siaurą ir klaidingą, ypač kai siauroji versija yra tai, ką visi mano esant galiojančia.

Susiję straipsniai