Übersicht zur NetzwerkkommunikationBei 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 UmsetzungIn 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:
|
<<: 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
Dieses Skript kann die Vorgänge zum Starten, Stop...
In diesem Artikel finden Sie das Installations- u...
Vorwort Wenn Sie RabbitMQ verwenden und für einen...
Beim Aktualisieren eines Datensatzes in MySQL ist...
Inhaltsverzeichnis Variable Datentypen Erweiterun...
Ich habe zuvor die Verwendung des asynchronen Lad...
Ich weiß nicht, ob es daran liegt, dass die Binär...
MySQL-Server hat Problem in PHP behoben 1. Hinter...
Inhaltsverzeichnis Konfigurieren Sie node.js+nvm+...
Inhaltsverzeichnis Prozesskommunikation Bidirekti...
„Entwicklung ist mehr als nur Code schreiben“ stam...
Socket-Optionsfunktion Funktion: Methoden zum Les...
Windows cmd Telnet Format: Telnet-IP-Port Fall: T...
Vorwort Programmiersprachen enthalten normalerwei...
Inhaltsverzeichnis 1. BOM-Einführung 1. JavaScrip...