Live FiveM Serverstatus auf deiner Website zeigen

Spielerzahl, Online Status und die Liste der verbundenen Spieler, von deinem eigenen Server geholt und auf deiner Seite ausgegeben. Die zwei Wege, das nötige Caching, und warum der naheliegende Weg in Produktion bricht.

Zuletzt aktualisiert

Eine Spielerzahl auf deiner Startseite hat eine Aufgabe: sie beweist, dass der Server lebt. Eine Community Seite ohne sie verlangt vom Besucher, dir zu glauben, und ein Besucher, der schon einmal auf einem toten Server gelandet ist, tut das nicht.

Es gibt zwei Wege, an diese Zahl zu kommen, sie scheitern unterschiedlich, und der, der einfacher aussieht, ist der, der bricht.

Die zwei Quellen

Über Cfx.re, adressiert über deinen Join Code. Cfx.re betreibt die Infrastruktur hinter dem Serverbrowser und stellt Daten pro Server bereit, adressiert über die sechs Zeichen aus cfx.re/join/xxxxxx. Du fragst einen festen Cfx.re Host nach einem Server und bekommst Hostname, Spielerliste und Slotzahl zurück.

Direkt von deinem eigenen Server. Ein FXServer beantwortet drei JSON Endpunkte auf seinem eigenen Port: /info.json für die Konfiguration inklusive sv_maxclients, /players.json für die Liste der verbundenen Spieler und /dynamic.json für die aktuelle und die maximale Zahl. Kein Dritter beteiligt.

Der direkte Weg sieht auf dem Papier besser aus. Er hängt von niemandem ab und ist immer aktuell. In der Praxis hat er drei Probleme, die der Cfx.re Weg nicht hat.

Warum der direkte Weg meistens verliert

Er legt die Adresse deines Servers offen. Um http://dein.host:30120/dynamic.json aus einem Browser abzufragen, muss diese Adresse in deiner Seite stehen. Damit hast du genau das veröffentlicht, wofür der Join Code da war.

Es ist einfaches HTTP. Deine Seite läuft über HTTPS. Ein Browser verweigert eine unsichere Anfrage von einer sicheren Seite, der Aufruf muss also auf deinem Server statt im Browser des Besuchers passieren, und damit brauchst du ein Backend. Wenn du eine statische Seite geplant hattest, hast du jetzt keine mehr.

sv_requestParanoia kann ihn abschalten. Das ist der Punkt, der die meisten erwischt. Es ist ein Server Convar, das einschränkt, wer diese Endpunkte aufrufen darf, und es ist nicht ungewöhnlich, dass es gesetzt ist, absichtlich oder durch den Standard eines Frameworks. Dann bekommt dein Widget nichts, und die Ursache ist von außen unsichtbar.

Nimm den direkten Weg, wenn die Anfrage ohnehin serverseitig läuft, du das Convar kontrollierst und du gezielt Daten willst, die Cfx.re nicht führt. Sonst nimm den Join Code.

Wie eine funktionierende Abfrage aussieht

Welche Quelle du auch nimmst, dieselben vier Dinge entscheiden, ob es in Produktion funktioniert.

Einmal fragen, nicht einmal pro Besucher. Der mit Abstand häufigste Fehler. Eine Seite, die bei jedem Aufruf abfragt, macht aus hundert gleichzeitigen Lesern hundert Anfragen nach oben, und dafür wirst du ausgebremst. Cache die Antwort dreißig bis sechzig Sekunden. Eine Spielerzahl, die eine Minute alt ist, ist für einen Menschen nicht von einer Live Zahl zu unterscheiden, und der Unterschied für die Gegenstelle ist das Hundertfache.

Schnell abbrechen und eine Antwort bereithalten. Eine hängende Gegenstelle darf deine Seite nicht mit hängen lassen. Acht Sekunden sind aus einem Rechenzentrum eine großzügige Obergrenze. Danach zeigst du den letzten bekannten Wert oder ein ehrliches "Status nicht verfügbar", niemals einen Spinner, der ewig dreht.

Behandle einen veralteten Eintrag als offline. Das ist der subtile Punkt. Ein Server, der gestoppt wurde, verschwindet nicht sofort aus der Liste, er hört nur auf, aktualisiert zu werden. Wenn du ausgibst, was die API zuletzt gesagt hat, zeigt ein Server, der vor einer Stunde gestorben ist, immer noch neun Spieler online, und das ist schlimmer als gar nichts zu zeigen. Prüfe den Zeitstempel des letzten Kontakts und behandle alles, was älter als etwa zehn Minuten ist, als offline.

Unterscheide leer von offline. Null Spieler auf einem laufenden Server und ein Server, der nicht läuft, sind verschiedene Tatsachen, und deine Besucher lesen sie völlig unterschiedlich. "0/64 online" heißt ruhiger Abend. "Offline" heißt, lad das gar nicht erst herunter. Gib nicht das erste aus, wenn du das zweite meinst.

So ausgeben, dass es etwas bedeutet

Die Zahl ist nicht der Punkt. Was ein Besucher als Nächstes tut, ist der Punkt.

  • Setz sie neben den Beitreten Button, nicht in eine Statistikleiste ganz unten. Die Zahl existiert, damit sich der Button lohnend anfühlt.
  • Zeig auch die Slotzahl. "24 Spieler" ist mehrdeutig. "24/64" sagt, es ist Platz, und "62/64" sagt, beeil dich.
  • Überleg dir die Spielerliste. FiveM gibt dir die Namen der verbundenen Spieler. Auf einem Rollenspielserver ist das ungewöhnlich überzeugend, weil ein Besucher Namen aus Clips wiedererkennt, und es ist zugleich eine Datenschutzentscheidung, die deine Community bewusst treffen sollte und nicht nebenbei.
  • Animiere keine Zahl, die gecacht ist. Ein Zähler, der jede Sekunde hochläuft, während der Wert darunter einmal pro Minute aktualisiert wird, ist Theater, und Leute merken das.

Ohne Backend

Wenn deine Seite statisch ist, hast du drei Möglichkeiten, sortiert danach, wie gut sie altern.

Eine kleine Serverless Funktion. Ein Endpunkt auf deiner eigenen Domain, der die Abfrage macht, cacht und JSON zurückgibt. Deine Seite ruft den auf. Jeder brauchbare statische Hoster bietet das an, und es hält deinen Join Code und deine Cachingregel an einer Stelle, die dir gehört.

Ein Status Widget von Dritten. Am schnellsten fertig, und du renderst jetzt das iframe von jemand anderem auf deiner Startseite, mit dessen Verfügbarkeit und dessen Tracking. Als Zwischenlösung in Ordnung.

Nur zur Buildzeit. Beim Veröffentlichen abfragen und die Zahl einbacken. Das ist schlechter als nichts. Ein festgeschriebenes "47 Spieler online", das sich nie ändert, ist aktiv unehrlich, und Besucher, die zweimal wiederkommen, merken es.

Wenn offline steht und der Server läuft

Arbeite es in dieser Reihenfolge ab.

  1. Prüf den Code, nicht den Server. Leerzeichen entfernen, ein cfx.re/join/ Präfix entfernen, Groß und Kleinschreibung prüfen. Die meisten Fehler sitzen hier.
  2. Bestätige, dass der Server bei Cfx.re registriert ist. Wenn er im Serverbrowser überhaupt nicht auftaucht, kann keine Abfrage über einen Join Code ihn finden.
  3. Wenn du direkt abfragst, prüf sv_requestParanoia. Das ist die wahrscheinlichste einzelne Ursache dafür, dass eine direkte Abfrage nichts liefert, während sonst alles gesund aussieht.
  4. Prüf, woher die Anfrage kam. Eine Abfrage, die von deinem Laptop funktioniert und von deiner veröffentlichten Seite nicht, ist ein Unterschied zwischen Rechenzentrum und Privatanschluss, kein Unterschied im Code.
  5. Prüf deinen eigenen Cache. Wenn du ein Offline Ergebnis eine Stunde lang gecacht hast, siehst du es eine Stunde lang weiter.

In dieser Vorlage

RPWebsite liefert das als Konfiguration. Setz deinen Join Code, und Status, Spielerzahl, Spielerliste und Beitreten Button lesen alle daraus, mit Caching und Veraltungsprüfung bereits an Ort und Stelle. Für den Fall, dass du den direkten Weg willst, ist eine FiveM Serverressource dabei, und zwischen beiden zu wechseln ist ein Konfigurationswert und kein Umbau.

ab $99

Einmalig · kompletter Quellcode

Jetzt kaufen