CocosCreator Erste Schritte Tutorial: Netzwerkkommunikation

CocosCreator Erste Schritte Tutorial: Netzwerkkommunikation

Übersicht zur Netzwerkkommunikation

Bei der Entwicklung eines Online-Spiels muss man sich zwangsläufig mit Netzwerkkommunikation befassen. Dabei sind einige Punkte zu beachten:

1. Für eine schnelle Entwicklung kann der Server im Frühstadium die HTTP-Kommunikation verwenden und später zu WebSocket/Socket wechseln.

2. Es gibt sowohl HTTP- als auch WebSocket/Socket-Kommunikation

3. Das Kommunikationsdatenformat muss möglicherweise jederzeit durch JSON oder Protokollpuffer ersetzt werden und es müssen möglicherweise zusätzliche Header hinzugefügt werden.

4. Verwenden Sie lokale Daten zur Simulation im Anfängerhandbuch. Die Anforderung muss nicht an das Backend gesendet werden.

5. Einfache Datensynchronisation nach erneuter Verbindung

Konkrete Umsetzung

In Bezug auf die erste und zweite Frage werde ich beim Entwurf des Kommunikationsmoduls berücksichtigen, die Kommunikation so weit wie möglich in eine einheitliche externe Schnittstelle zu abstrahieren und beim Starten des Spiels Instanzen über verschiedene Treiber zu erstellen (wenn nur eine Kommunikationsmethode verwendet wird, verwenden Sie eine einzelne Instanz).

öffentlicher Konstruktor(Treiber: ConnectDriver) {
        this._driver = Treiber;
}

Definieren Sie zunächst die allgemeine Datenstruktur der Netzwerkkommunikation. Die Anfragen werden in zwei Typen unterteilt: Daten und Steuerung, die zur Unterscheidung zwischen Heartbeat, Anmeldung und erneuter Verbindung verwendet werden.

/**
 * Anfragetyp */
export enum RequestType {
    DATEN = 1,
    STRG
}
 
/**
 * Datenstruktur der Netzwerkkommunikation */
Exportschnittstelle NetData {
    seq?: Nummer; // Seriennummer mod: Nummer; // Modul cmd: Nummer; // Befehlspfad?: Zeichenfolge; // Pfaddaten?: beliebig; // Daten tmpData?: beliebig; // Temporäre Daten des Datenprozessors status?: Nummer; // Statuscodetyp?: RequestType; // Anforderungstyp}

Definieren Sie dann die gemeinsame externe Schnittstelle

öffentlich öffnen (URL: Zeichenfolge, Port: Nummer, isBinary: Boolesch, Timeout: Nummer, RetryCount: Nummer, Parameter: beliebig, cb: (succ: Boolesch) => void): void {}
 
öffentliches Schließen(): Zahl {}
 
öffentliche Wiedereröffnung(cb: (succ: boolean) => void): void {}
 
öffentliche sendData(Daten: NetData, Parameter: HttpReq | beliebig, succCb: (Daten: NetData) => void, failedCb: (Code: Nummer, Grund: Zeichenfolge) => void): void {}
 
öffentliches resendNotRecv(): void {}

resendNotRecv wird zum Senden von Paketen verwendet, die nach der erneuten Verbindung keine Antwort erhalten haben, und das Backend entscheidet basierend auf der Sequenznummer, ob es verarbeitet werden soll.

Hier gibt es keine Push-Verarbeitung. Tatsächlich ruft Push nach dem Empfang der Serverdaten einen Broadcast an den Listener auf. Im Folgenden wird der Listener definiert

/**
 * Schnittstelle zur Überwachung von Netzwerkverbindungsereignissen */
Schnittstelle ConnectEventListener exportieren {
    beim Öffnen (Treiber: ConnectDriver);
    beiGeschlossen(Treiber: ConnectDriver);
    beiFehler(Treiber: ConnectDriver, Nachricht: Zeichenfolge);
    onSendStart(Treiber: ConnectDriver);
    onRecvEnd(Treiber: ConnectDriver);
}
 
/**
 * Schnittstelle zur Überwachung von Netzwerkereignissen */
Exportschnittstelle NetEventListener erweitert ConnectEventListener {
    onPush(Treiber: ConnectDriver, Daten: NetData): void;
}

Bereitstellung von Anmelde- und Abmeldeschnittstellen für Externe

öffentliche addEventListener(listener: NetEventListener): void {}
 
öffentliche removeEventListener(listener: NetEventListener): void {}

Für das dritte Problem müssen wir einige Präprozessoren definieren, um vor dem Senden und nach dem Empfangen von Daten Abfang- und Vorverarbeitungsvorgänge durchzuführen.

/**
 * Schnittstelle für Netzwerkkommunikationsdatenprozessoren */
Exportschnittstelle NetDataProcessor {
    processReqData(Daten: beliebig): beliebig;
    processRespData(Daten: beliebig): beliebig;
}

Bietet Schnittstellen zum Hinzufügen und Entfernen zur Außenwelt, sodass das Kommunikationsdatenformat flexibel definiert werden kann

öffentliche addDataProcessor(Prozessor: NetDataProcessor): void {}
 
öffentliche removeDataProcessor(Prozessor: NetDataProcessor): void {}

Für das vierte Problem fügen wir außerdem einen speziellen Interceptor hinzu, der die Anforderung vor dem Senden verarbeitet. Wenn der Interceptor damit umgehen kann, wird sie nicht mehr an das Backend gesendet.

/**
 * Serverschnittstelle simulieren */
Schnittstelle SimServer exportieren {
    handleRequest(Daten: NetData): NetData;
}

Bereitstellung einer externen Einstellungsschnittstelle

öffentliche setSimServer(server: SimServer): void {}

Für die fünfte Frage haben alle Datenanforderungen Seriennummern, die Anforderungen werden aufgezeichnet und die nicht reagierenden Anforderungspakete werden in eine Warteschlange gestellt. Nach der Wiederherstellung der Verbindung werden diese Pakete zur Verarbeitung erneut an das Backend gesendet.

öffentliches resendNotRecv(): void {}

Oben finden Sie den detaillierten Inhalt der Netzwerkkommunikation im Einführungstutorial von CocosCreator. Weitere Informationen zur Netzwerkkommunikation von CocosCreator finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Cocos2d-x 3.x Erste Schritte Tutorial (Teil 2): ​​Node-Klasse
  • Cocos2d-x 3.x Erste Schritte Tutorial (I): Grundkonzepte
  • Cocos2d-x Erste Schritte Tutorial (ausführliche Beispiele und Erklärungen)
  • Detaillierte Erklärung zur Erstellung von Schießspielen mit CocosCreator
  • So zeichnen Sie in CocosCreator ein cooles Radardiagramm
  • Detaillierte Erklärung der CocosCreator MVC-Architektur
  • Detaillierte Erläuterung des CocosCreator-Nachrichtenverteilungsmechanismus
  • So erstellen Sie WeChat-Spiele mit CocosCreator
  • Detaillierte Erklärung, wie CocosCreator-Systemereignisse generiert und ausgelöst werden
  • So verwenden Sie einen Gamecontroller in CocosCreator
  • Detaillierte Erklärung des digitalen Puzzles CocosCreator Huarongdao
  • CocosCreator-Tutorial für den Einstieg: Erstellen Sie Ihr erstes Spiel mit TS

<<:  Lösung für verstümmelte chinesische Schriftzeichen beim Bedienen einer MySQL-Datenbank in CMD

>>:  Eine Frage zum Verständnis mehrerer Parameter des Sortierbefehls in Linux

Artikel empfehlen

Shell-Skript Nginx-Automatisierungsskript

Dieses Skript kann die Vorgänge zum Starten, Stop...

Analyse des Prinzips des Rabbitmq Heartbea-Herzschlagerkennungsmechanismus

Vorwort Wenn Sie RabbitMQ verwenden und für einen...

Detaillierte Erklärung der Javascript-Grundlagen

Inhaltsverzeichnis Variable Datentypen Erweiterun...

Installations- und Verwendungsschritte für vue-amap

Ich habe zuvor die Verwendung des asynchronen Lad...

Docker fügt eine Brücke hinzu und legt den IP-Adressbereich fest

Ich weiß nicht, ob es daran liegt, dass die Binär...

Lösung für den Fehler „MySQL-Server ist verschwunden“

MySQL-Server hat Problem in PHP behoben 1. Hinter...

MAC+PyCharm+Flask+Vue.js-Build-System

Inhaltsverzeichnis Konfigurieren Sie node.js+nvm+...

Implementierung von Socket-Optionen in der Linux-Netzwerkprogrammierung

Socket-Optionsfunktion Funktion: Methoden zum Les...

Methode zum Erkennen, ob IP und Port verbindbar sind

Windows cmd Telnet Format: Telnet-IP-Port Fall: T...

Teilen Sie einige ungewöhnliche, aber nützliche JS-Techniken

Vorwort Programmiersprachen enthalten normalerwei...

JavaScript BOM erklärt

Inhaltsverzeichnis 1. BOM-Einführung 1. JavaScrip...