Server BeamMP nemá vlastní pevný strop počtu hráčů. MaxPlayers přijme libovolné číslo od 1 výše a serverový program bude přeposílat data tolika lidem, kolik dovolíš. Limit, na který narazíš doopravdy, je jinde: počítač každého hráče musí simulovat každé auto na serveru, takže skutečným stropem je celkový počet vozidel, tedy MaxPlayers krát MaxCars, poměřený s nejslabším PC v relaci. Pro smíšenou veřejnou partu to znamená zhruba 10-12 hráčů s 1-2 auty na hlavu. Parta kamarádů se silnými procesory zvládne 20 i víc s jedním autem na osobu. Nad zhruba 30 vozidel ve stejné oblasti už skoro nikomu nedrží fyzika v reálném čase.
Server sám je ta levná část. Používá málo CPU a paměti a jeho náklady rostou s přenosem dat, který stoupá s druhou mocninou počtu hráčů. Tento článek vysvětluje, odkud se které limity berou, jak odhadnout provoz, co způsobuje sekání a teleportování, kterému se říká lag, a jak nastavit MaxPlayers a MaxCars pro server, který chceš provozovat. Instalaci, auth key a zbytek souboru ServerConfig.toml najdeš v průvodci serverem BeamMP.
Proč je limit na počítačích hráčů#
BeamNG.drive simuluje každé vozidlo jako měkkou strukturu stovek či tisíců uzlů a nosníků, a to při fyzikální frekvenci hluboko nad počtem snímků za sekundu. Právě proto vypadají nehody správně, ale je to drahé. Moderní desktopový procesor udrží v reálném čase hrstku vozidel. Nad to BeamNG neubírá detaily - zpomalí simulaci, takže vidíš auta jezdit ve zpomaleném záběru, zatímco hodiny běží normálně.
BeamMP tento model nemění. Každý klient autoritativně provozuje svá vlastní vozidla a navíc lokálně simuluje vozidla všech ostatních hráčů, korigovaná aktualizacemi polohy a stavu, které přicházejí přes server. Server žádnou fyziku nevidí. Ověřuje hráče, eviduje, komu patří které vozidlo, přeposílá aktualizace a spouští pluginy v Lua.
Takže když má deset hráčů venku po dvou autech, každý z deseti počítačů simuluje dvacet vozidel. Hráč s rychlým procesorem a hráč s pět let starým notebookem mají za úkol úplně stejnou práci a notebook rozhoduje o tom, jak relace vnímá jeho majitel. Nic na straně serveru jim tuto zátěž nesejme. Větší hostingový tarif klientovi s vytíženým procesorem nepomůže.
Dva důsledky stojí za to říct přímo:
- Zdvojnásobení hráčů zhruba zčtyřnásobí celkovou práci. Dvakrát víc počítačů simuluje dvakrát víc aut. Proto server, který při 8 hráčích fungoval dobře, při 16 působí rozbitě, a proto snížení
MaxCarspřinese víc rezervy než jakákoli jiná změna. - Grafy výkonu na straně serveru budou obvykle klidné, zatímco si hráči stěžují. CPU serveru není tam, kde se pracuje. Než cokoli upgraduješ, zeptej se, jak vypadají snímky za sekundu a rychlost simulace u hráčů, kteří si stěžují.
MaxPlayers a MaxCars: co přesně dělají#
Obě volby jsou v sekci [General] souboru ServerConfig.toml. Výchozí hodnoty, které píšou současné buildy serveru, jsou konzervativní:
[General]MaxPlayers = 8MaxCars = 1Private = true| Klíč | Výchozí | Co omezuje |
|---|---|---|
MaxPlayers | 8 | Připojené hráče na celém serveru. Vozidla neomezuje |
MaxCars | 1 | Vozidla na hráče. Přebytečná se smažou hned po spawnu |
Private | true | Není to limit, ale nový server je nezveřejněný, dokud nenastavíš false |
MaxCars platí na hráče, ne na server. Žádný vestavěný strop vozidel pro celý server neexistuje, takže nejhorší případ je vždy součin obou čísel. Server s MaxPlayers = 20 a MaxCars = 3 povoluje 60 vozidel a při plném večeru se k nim přiblíží.
Pár detailů lidi překvapí:
- Vozidlo je všechno, co hráč spawnne. Přívěsy, rekvizity a AI provoz spawnnuté z klienta si každé zabírá místo v
MaxCars. Na většině verzí totéž platí o chůzi (unicycle), a proto hráč na serveru sMaxCars = 1, který vystoupí a jde pěšky, může zjistit, že mu zmizelo auto. Pokud je tvůj server postavený na přívěsech nebo tažení, je praktickým minimemMaxCars = 2. - Spawn je nejdražší okamžik. Když se vozidlo spawnne nebo upraví, musí ho každý klient načíst a sestavit a BeamNG se u toho krátce zasekne. Na vytíženém serveru hráči, kteří resetují nebo střídají auta, způsobují všem ostatním proud drobných záseků. Klient BeamMP nabízí v nastavení multiplayeru frontu, která drží vzdálené spawny a úpravy, dokud se to nehodí; názvy voleb se mezi verzemi klienta měnily, takže hledej v sekci Multiplayer v nastavení ve hře.
- Limity se vynucují, nejsou jen doporučené. Vozidlo nad
MaxCarsse smaže, místo aby bylo zdvořile odmítnuto, a hráč nadMaxPlayersje odmítnut ve dveřích.
Pokud chceš chytřejší pravidla než „N na hráče" - strop pro celý server, jiné limity pro personál, žádné těžké náklaďáky po dosažení určitého počtu hráčů - je to práce pro plugin v Lua, o kterém píšeme níže.
Přenos dat na hráče a jak se škáluje#
Provoz serveru se snadno modeluje, když pochopíš jeho tvar. Majitel každého vozidla posílá serveru proud aktualizací polohy, rotace, rychlosti a vstupů. Server každý z těchto proudů přeposílá všem ostatním hráčům. Aktualizace elektriky a poškození přidávají další data, když se něco stane - světla, klakson, nehoda - a události spawnu a úprav nesou celou konfiguraci vozidla.
Odchozí provoz serveru tak má kvadratický tvar:
outbound ≈ players × (players - 1) × cars per player × per-vehicle streaminbound ≈ players × cars per player × per-vehicle streamHodnota na jedno vozidlo závisí na verzi klienta, rychlosti aut a četnosti poškození, takže ji změř a nespoléhej na číslo z fóra. Spolehnout se můžeš na škálování. Při jinak stejných podmínkách:
| Hráči x auta | Proudy, které server posílá | Oproti 8 x 1 |
|---|---|---|
| 8 x 1 | 56 | 1x |
| 10 x 2 | 180 | asi 3x |
| 16 x 1 | 240 | asi 4x |
| 20 x 2 | 760 | asi 14x |
| 30 x 2 | 1,740 | asi 31x |
Skok z 8 na 16 hráčů s jedním autem na osobu stojí čtyřnásobek uploadu a 30 hráčů se dvěma auty stojí třicetkrát tolik co výchozí konfigurace. Příchozí provoz zůstává lineární a malý; jako u téměř každé hry se plní odchozí strana. Přenos dat herního serveru na hráče popisuje tuto asymetrii napříč hrami a proč bývá skutečným problémem málokdy ustálený provoz.
Špičky jsou důležitější než ustálený stav. Každý bajt v Resources/Client se pošle každému připojujícímu se hráči, který ho ještě nemá. Balík módů o velikosti 2 GB a pět lidí, kteří se připojí na začátku akce, znamená 10 GB odeslaných během několika minut, v soutěži s proudy vozidel všech, kdo už jezdí. To je často okamžik, kdy se hladká relace najednou začne všem vracet zpět, a s počtem hráčů to nemá nic společného. Drž balík štíhlý, dopředu lidem řekni jeho velikost a stálé hráče požádej, ať se před organizovanou akcí připojí s předstihem.
Na vlastním stroji s Linuxem uvidíš skutečná čísla nejrychleji tak, že budeš během relace sledovat port:
$ sudo iftop -i eth0 -f "port 30814"$ vnstat -l -i eth0iftop ukazuje živý provoz po jednotlivých spojeních, takže odhalí i to, který hráč zrovna stahuje balík módů. vnstat -l dává průběžný součet za rozhraní. Poznamenej si hodnoty ve vytíženém okamžiku při známém počtu hráčů a aut, vyděl a máš vlastní číslo na vozidlo, které dosadíš do vzorce.
U domácího hostingu je zdí upload. Domácí linka s 20-40 Mbit/s nahoru stačí pro malou skupinu a u horních řádků tabulky rychle dojde, zvlášť když někdo stahuje módy. Uplink v datacentru má rezervu pro jakýkoli realistický server BeamMP, ale neomezený provoz neznamená bez limitu a veřejný server, který celý den cpe vícegigabajtový balík cizím lidem, je přesně ten druh provozu, o který v té otázce jde.
Tabulka dimenzování: hráči, auta a prostředky serveru#
Dimenzovat je třeba dvě různé věci a snadno se pletou. První je relace - kolik vozidel po počítačích hráčů chceš, aby simulovaly. Druhá je server - RAM, CPU a přenos pro přeposílací program.
Začni relací. Toto jsou pracovní hodnoty pro veřejný nebo poloveřejný server, kde hardware hráčů neovlivníš:
| Typ serveru | MaxPlayers x MaxCars | Vozidel na klienta |
|---|---|---|
| Malá skupina, silná PC | 6-8 x 3 | Až 24 |
| Veřejný freeroam, smíšená PC | 10-12 x 2 | Až 24 |
| Rušné veřejné projížďky | 16-20 x 1 | Až 20 |
| Velká akce, každý jedno auto | 25-30 x 1 | Až 30, chce silná PC |
| Derby nebo těsné závody | 8-12 x 1 | Až 12, všechna blízko sebe |
Těsné závody a demolition derby si zaslouží vlastní řádek. Nehody jsou to nejdražší, co BeamNG simuluje, srážky mezi vzdálenými vozidly jsou místem, kde se desync projevuje nejvíc, a v derby jsou všechna auta ve stejné malé aréně. Dvanáctivozové derby je těžší zátěž než čtyřicetivozová projížďka po Itálii, protože při projížďce je většina vozidel daleko a jede plynule.
Pak server. Přeposílání je lehké a paměť tvoří hlavně program, stav Lua a buffery pro probíhající přenosy módů:
| Hráči | RAM | vCPU |
|---|---|---|
| Do 10 | 2 GB | 1 |
| 10-20, balík módů | 3-4 GB | 1.5-2 |
| 20-40, náročné pluginy | 4-6 GB | 2 |
CPU na serveru je většinou práce jednoho vlákna. Když je vysoké při skromném počtu hráčů, příčinou je téměř vždy plugin v Lua s rychlým časovačem nebo náročným zpracováním JSON v handleru spawnu, ne počet hráčů. Pluginy v Lua a závody pro BeamMP ukazují, jak měřit čas handlerů pomocí Util.DebugExecutionTime(). Disk je tolik, kolik váží tvůj balík módů, plus trochu; obecný obrázek najdeš v článku kolik úložiště potřebuje herní server.
U RE:NODE se tarify BeamMP pohybují od 2 GB s jedním vCPU až po 8 GB se třemi, na NVMe, a CPU je pevně přidělený podíl, ne burst. Pro BeamMP pokrývají nižší tarify téměř každý server, protože to drahé se děje na strojích hráčů; větší tarif se vyplatí kvůli místu na disku pro velký balík módů nebo kvůli pluginům, které dělají skutečnou práci, ne kvůli zvýšení MaxPlayers.
Co způsobuje lag a desync#
„Lag" zahrnuje na serveru BeamMP nejméně pět různých problémů a každý chce jinou opravu. Rozlišit je zabere minutu kladení správných otázek.
Zpomalený záběr u jednoho hráče. Jeho procesor nedrží fyziku v reálném čase při počtu vozidel v okolí. BeamNG simulaci zpomalí místo vynechávání, takže na jeho obrazovce se všechno hýbe pomalu a na obrazovkách ostatních se jeho auto chová divně. Je to nejčastější stížnost na vytíženém serveru a je to celé na straně klienta. Pomůže méně vozidel; nic jiného ne.
Vzdálená auta, která cukají, teleportují se nebo projíždějí zdmi. Chybějící nebo opožděné aktualizace. Každé vzdálené auto se mezi aktualizacemi simuluje lokálně a pak se koriguje, a když se aktualizace ztratí, je korekce velká a viditelná. Pokud to dělá auto jednoho hráče na obrazovkách všech, problém je v připojení toho hráče. Pokud to dělají všechna vzdálená auta na obrazovce jednoho hráče, je to připojení hráče, který se dívá. Pokud to všichni vidí u všech ve stejný okamžik, podívej se na upload serveru - často je to stahování módů nebo nával připojení. Latence, jitter a ztráta paketů vysvětluje, jak tyto tři případy rozlišit pingovým testem.
Srážky, které si neodpovídají. Dva hráči se srazí a každý vidí jiný výsledek. Je to zabudované v architektuře: majitel každého auta je autoritou pro jeho fyziku a druhé auto na jeho obrazovce je predikce z mírně starých dat. Při 100 ms latence mezi dvěma hráči je auto jedoucí 100 km/h téměř tři metry od místa, kde si ho druhý hráč představuje. Kontaktní jízda na BeamMP funguje nejlépe mezi hráči s nízkým pingem k témuž serveru, a to je skutečný argument pro hostování blízko hráčů. Některé servery kvůli tomu vypínají srážky při veřejném projíždění, přes plugin nebo klientský mód; zjisti, co nabízí tvoje verze.
Všichni na vteřinu zamrznou. Téměř vždy spawn nebo úprava vozidla. Těžká modovaná vozidla s vysokým počtem uzlů to zhoršují. Server, kde lidé neustále respawnují, protože pořád bourají, bude sekat všem. Fronta na straně klienta pomáhá; plugin, který omezuje četnost spawnů na hráče, pomáhá víc.
Sekání, které začalo po přidání módu. Některé módy vozidel a map jsou mnohem těžší než základní obsah nebo jsou pro aktuální verzi BeamNG rozbité a chrlí chyby v každém snímku. Otestuj to tak, že mód přesuneš z Resources/Client a restartuješ. Pokud je problémem mód mapy, platí cenu každý hráč po celou relaci.
Řízení počtu vozidel pomocí pluginu v Lua#
MaxCars je tupý nástroj. Plugin dokáže vynutit celkový počet pro celý server, což je číslo, na kterém klientům skutečně záleží. onVehicleSpawn se spustí dřív, než je vozidlo přijato, a vrácení 1 ho zruší:
local SERVER_CAP = 24local function countVehicles() local total = 0 for id, _ in pairs(MP.GetPlayers() or {}) do local vehicles = MP.GetPlayerVehicles(id) if vehicles then for _ in pairs(vehicles) do total = total + 1 end end end return totalendfunction capSpawn(playerID, vehicleID, data) if countVehicles() >= SERVER_CAP then MP.SendChatMessage(playerID, "Server vehicle limit reached. Remove a car first.") return 1 endendMP.RegisterEvent("onVehicleSpawn", "capSpawn")S tímto pluginem můžeš nastavit MaxCars = 3, aby hráči měli místo na přívěs, a přesto mít jistotu, že server nikdy nenutí klienta provozovat víc než 24 vozidel. Stejný handler je místem, kde bys odmítl konkrétní těžké modely nebo povolil vyšší počet pro personál kontrolou identifikátoru beammp. Každý plugin nejdřív otestuj na verzi svého serveru - API se mezi hlavními vydáními měnilo a průvodce pluginy v Lua popisuje podpisy událostí podrobně.
Drž takové handlery levné. Spawn handler, který projde pár desítek vozidel, nestojí nic; ten, který při každém spawnu dekóduje celý konfigurační JSON každého vozidla, se na vytíženém večeru začne projevovat na CPU serveru.
Jak limit zvýšit bezpečně#
Když je server plný, záleží na pořadí změn. Většina užitečných pák je zdarma:
- Nejdřív sniž `MaxCars`. Přechod z 2 na 1 sníží zátěž klienta i přenos na polovinu. Pokud lidé potřebují přívěsy, přidej limit v pluginu.
- Pro větší davy vol větší mapu. Auta daleko od sebe jsou levnější než auta na jedné křižovatce a vyvolávají méně srážek, o kterých se pak dá nesouhlasit. Gridmap a malé arény jsou pro malé skupiny.
- Zeštíhli balík módů. Každý těžký mód vozidla zvyšuje cenu na vozidlo u každého klienta a velikost balíku rozhoduje o tom, jak bolestivé je připojování.
- Nastav očekávání v popisu serveru. „Doporučeno: 6jádrový procesor" v
Descriptionnebo na tvém Discordu ti ušetří hráče, kteří se připojí, jedou poloviční rychlostí a vinu dají hostiteli. - `MaxPlayers` zvyšuj po malých krocích. Jdi z 10 na 14, sleduj celý večer a pak rozhodni. Všímej si hráčů, kteří hlásí zpomalený záběr, nejen vlastních čísel serveru.
- Teprve pak řeš tarif. Pokud je CPU serveru skutečně vysoké, najdi nejdřív plugin. Pokud limitem je upload doma, vyřeší to hosting v datacentru.
Restart před velkou relací je spíš hygiena než oprava výkonu: vyčistí zaseklý stav vozidel a zajistí, že všichni začnou na stejné verzi serveru. Plány restartů, které pomáhají popisují, kdy ho naplánovat. U RE:NODE může restart a před ním i backup spouštět karta Schedules podle výrazu cron.
Řešení potíží#
Hráči hlásí zpomalený záběr, jakmile se server zaplní. Příliš mnoho vozidel pro jejich procesory. Sniž MaxCars nebo MaxPlayers; větší tarif serveru na tom nic nezmění.
Všichni se vracejí zpět ve stejný okamžik. Zkontroluj, jestli se někdo nepřipojoval a nestahoval balík módů. Pokud ne, zkontroluj upload serveru, zvlášť u domácího připojení.
Auto jednoho hráče se teleportuje na obrazovkách všech. Je to připojení toho hráče. Požádej ho, ať otestuje ztrátu paketů k adrese serveru na kabelovém připojení.
Nová vozidla po spawnu hned zmizí. Hráč je na MaxCars, možná se do něj počítá přívěs nebo chodící unicycle. Nebo plugin vrátil z onVehicleSpawn hodnotu 1.
CPU serveru na 100 % s hrstkou hráčů. Plugin. Odebírej pluginy z Resources/Server po jednom nebo měř čas jejich handlerů.
Server je plný, ale seznam ukazuje volná místa. Seznam se obnovuje se zpožděním. Hráči, kteří se připojují podle adresy, dostanou skutečnou odpověď.
FAQ#
Jaký je maximální počet hráčů na serveru BeamMP?
Server žádné pevné maximum nemá; MaxPlayers přijme libovolné kladné číslo. Pracovním limitem je výkon klientů: rušné veřejné servery obvykle jedou 10-20 hráčů a velmi velké akce potřebují jedno auto na osobu a hráče se silnými procesory.
Mám zvýšit MaxPlayers, nebo MaxCars?
U veřejného serveru hráče. Každé další auto na hráče přidá celé vozidlo každému klientovi za každého připojeného hráče, takže MaxCars je z obou dražší. Drž ho na 1-2 a raději přidej místa pro hráče.
Sníží lepší tarif serveru lag v BeamMP?
Jen když je úzkým místem server, což je neobvyklé: plugin, který žere příliš CPU, nebo domácí připojení, kterému dochází upload. Zpomalený záběr a neshody při srážkách pocházejí z počítačů a připojení hráčů.
Počítá se chodící unicycle jako auto?
Na většině verzí BeamMP ano - spawnuje se jako vozidlo a počítá se do MaxCars. Pokud očekáváš, že lidé budou vystupovat a chodit pěšky, povol aspoň dvě auta na hráče.
Kolik uploadu potřebuje server BeamMP?
Roste s druhou mocninou počtu hráčů, takže změř při známé zátěži a podle toho škáluj. Malá skupina se vejde na domácí připojení; dvacet hráčů se dvěma auty a ke tomu stahování módů potřebuje uplink v datacentru.


