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

Grafische Schritte zur Zabbix-Überwachung des VMware Exsi-Hosts

1. Rufen Sie das Virtualisierungscenter auf, meld...

Vue.js verwaltet die Kapselung von Hintergrundtabellenkomponenten

Inhaltsverzeichnis Problemanalyse Warum Kapselung...

Einige Tipps zur richtigen Verwendung des HTML-Titelattributs

Wenn Sie Inhalte vor Benutzern von Telefonen, Tabl...

Natives JS realisiert zusammengesetzte Bewegungen verschiedener Bewegungen

In diesem Artikel erfahren Sie mehr über eine zus...

So verwenden Sie den Linux-Befehl md5sum

01. Befehlsübersicht md5sum - MD5-Prüfcode berech...

So konfigurieren Sie Bash-Umgebungsvariablen in Linux

Shell ist ein in der Programmiersprache C geschri...

Verwenden einer MySQL-Datenbank im Docker, um LAN-Zugriff zu erhalten

1. Holen Sie sich das MySQL-Image Docker-Pull MyS...

So stellen Sie mit Node-Red eine Verbindung zur MySQL-Datenbank her

Um Node-red mit der Datenbank (mysql) zu verbinde...

Installations-Tutorial für mysql8.0rpm auf centos7

Laden Sie zunächst das Diagramm herunter 1. Deins...

Nützliche Codes zum Erstellen von Webseiten

<br />Wie kann ich die Bildlaufleiste auf de...

Warum MySQL Repeatable Read als Standardisolationsebene wählt

Inhaltsverzeichnis Oracle-Isolationsebenen MySQL-...