2016-08-04 21 views
1

Ich entwickle ein Spiel, bei dem mein Backend in NodeJS geschrieben ist und ich socket.io für die Echtzeitkommunikation verwende.Matchmaking mit socket.io - setzen Sie auf setInterval oder Socket-Aufrufe?

Eines der Merkmale meines Spiels ist Matchmaking. Wenn sich mehr als zwei Spieler in der Matchmaking-Phase befinden, erstellt meine Anwendung ein Spielzimmer (spezieller socket.io-Raum) für sie und startet das Spiel.

Es gibt zwei Möglichkeiten, dies zu tun:

  • einen setInterval auf NodeJS erstellen. Überprüfen Sie in dem Intervall playersInMatchmaking-Array. Wenn sich mehr als 2 Spieler im Array befinden, erstellen Sie das Spielzimmer. Ich werde Schleife, solange der Server online ist.

  • Statt auf setInterval zu verlassen, überprüfen playersInMatchmaking Array jedes Mal erhalte ich einen Anruf an socket.on("matchmaking start") oder socket.on("matchmaking stop")

Gibt es irgendwelche Vorteile bestimmten Ansatz? setInterval klingt einfacher, da ich den Matchmaking-Algorithmus von der Socket-Logik entkoppeln kann, jedoch weniger leistungsfähig ist, da der Matchmaking-Algorithmus im Gegensatz zu Socket-Ereignissen in einer Schleife ausgeführt wird.

Was denkst du? Hast du noch andere Ideen, die besser funktionieren würden?

Antwort

2

Sie werden die Verwendung von socket.io und Echtzeitkommunikation maximieren, indem Sie Ereignisse verwenden. Wenn es keinen anderen Grund gibt, als den Algorithmus zu entkoppeln, sollten Sie Ereignisse verwenden. Es gibt keinen Grund, die Schleife immer und immer wieder zu durchlaufen, wenn derzeit keine Benutzer/Spieler teilnehmen oder nach dem Spiel suchen.

Wenn das Intervall nicht klein genug ist (zum Beispiel 5 Sekunden), würde ich auch überlegen, was passiert, wenn Player1 in die Warteschlange gestellt wird, Player2 ebenfalls in die Warteschlange kommt und Player2 zwischen 2 Intervallen seine Suche nach seinem Gegner abbricht Er hat es satt zu warten. Der Hauptvorteil von ereignisgesteuerten Systemen außer dem von Ihnen erwähnten (Performance) ist, dass es keine echte Verzögerung gibt (außer dem Netzwerk, Code-Schleifen, Jitter, ...) und Dinge sofort passieren