Heim Java javaLernprogramm Wie implementiert Java Websocket Online-Gaming-Funktionen?

Wie implementiert Java Websocket Online-Gaming-Funktionen?

Dec 02, 2023 pm 02:44 PM
java websocket 在线游戏

Java Websocket如何实现在线游戏功能?

Java Websocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation über eine dauerhafte Verbindung erreichen kann. Dadurch eignet sich Java Websocket sehr gut für die Entwicklung von Echtzeit-Onlinespielen, da Spiele eine schnelle Interaktion und Echtzeitkommunikation erfordern.

In diesem Artikel stellen wir vor, wie Sie Java Websocket zur Implementierung von Online-Gaming-Funktionen verwenden. Wir werden Java 8 und Tomcat 8 als Entwicklungsumgebung verwenden und die Front-End-Seite verwendet HTML5 und JavaScript.

  1. Herstellen einer WebSocket-Verbindung

Zuerst müssen wir eine WebSocket-Verbindung erstellen. Wir können diese Funktionalität erreichen, indem wir einen WebSocket-Endpunkt schreiben. In einer JavaWeb-Anwendung können wir den Websocket-Endpunkt mit javax.websocket.Endpoint konfigurieren.

Das Folgende ist die Implementierung des Websocket-Endpunkts:

@ServerEndpoint("/game")
public class GameEndpoint {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("WebSocket Opened: " + session.getId());
        GameSessionManager.getInstance().addSession(session); // 将Session加入管理器
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("WebSocket Message received: " + message);
        GameSessionManager.getInstance().handleMessage(message, session); // 处理消息
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("WebSocket Closed: " + session.getId());
        GameSessionManager.getInstance().removeSession(session); // 将Session从管理器中移除
    }

    @OnError
    public void onError(Throwable throwable) {
        throwable.printStackTrace();
    }
}
Nach dem Login kopieren

In diesem Endpunkt definieren wir vier Annotationen:

  • @ServerEndpoint("/game") definiert den Pfad dieses Endpunkts als "/game".
  • @OnOpen definiert, was dieser Endpunkt tut, wenn WebSocket geöffnet wird, z. B. das Hinzufügen einer WebSocket-Verbindung zum Manager.
  • @OnMessage definiert, was dieser Endpunkt tut, wenn WebSocket eine Nachricht empfängt, z. B. das Senden der Nachricht an alle verbundenen WebSocket-Clients.
  • @OnClose definiert, was dieser Endpunkt tut, wenn WebSocket geschlossen wird, z. B. das Entfernen der WebSocket-Verbindung vom Manager.
  • @OnError definiert, was dieser Endpunkt tut, wenn ein WebSocket-Fehler auftritt.

Hinweis: Dies ist nur ein einfaches Beispiel. In tatsächlichen Anwendungen sollten mehr Fehlerbehandlung und Sicherheitsprüfungen durchgeführt werden.

  1. Spielsitzungen verwalten

Wir müssen eine GameSessionManager-Klasse erstellen, um Spielsitzungen zu verwalten. GameSessionManager ist eine Singleton-Klasse, die zur Verwaltung aller WebSocket-Verbindungen und zur Verarbeitung spielbezogener Nachrichten verwendet wird.

Das Folgende ist die Implementierung von GameSessionManager:

public class GameSessionManager {

    private Set<Session> sessions = new HashSet<>();
    private static GameSessionManager instance;

    private GameSessionManager() {
    }

    public static GameSessionManager getInstance() {
        if (instance == null) {
            synchronized (GameSessionManager.class) {
                if (instance == null) {
                    instance = new GameSessionManager();
                }
            }
        }
        return instance;
    }

    public void addSession(Session session) {
        sessions.add(session);
    }

    public void removeSession(Session session) {
        sessions.remove(session);
    }

    public void handleMessage(String message, Session session) {
        // TODO 处理消息
    }

    public void broadcast(String message) {
        for (Session session : sessions) {
            send(message, session);
        }
    }

    public void send(String message, Session session) {
        try {
            session.getBasicRemote().sendText(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Nach dem Login kopieren

In dieser Klasse erstellen wir eine Sammlung von Sitzungen, um alle WebSocket-Sitzungen zu speichern. Verwenden Sie die Methode getInstance(), um das Singleton-Objekt von GameSessionManager abzurufen. Beim Hinzufügen und Entfernen von WebSocket-Verbindungen fügen wir einfach die Verbindung zur Sammlung hinzu oder entfernen sie. Beim Senden einer Nachricht durchlaufen wir alle WebSocket-Sitzungen und senden die Nachricht an jede einzelne. Beim Senden einer Nachricht verwenden wir die Methode session.getBasicRemote(), um den grundlegenden Remote-Port abzurufen, und rufen dann die Methode sendText() auf, um die Nachricht an den Client zu senden.

  1. Verarbeitung von Spielnachrichten

Wir werden die Spielnachrichten vom Client in der GameSessionManager-Klasse verarbeiten und sie an den Client zurücksenden. Wir beschäftigen uns hier auch mit der Spiellogik.

Hier ist ein einfaches „Chat“-Spiel mit „Hallo“- und „Tschüss“-Operationen als Beispiel:

public void handleMessage(String message, Session session) {
    JSONObject json = new JSONObject(message);
    String action = json.getString("action");
    switch (action) {
        case "hello":
            String name = json.optString("name");
            broadcast(name + " joined the game.");
            break;
        case "bye":
            String playerName = json.optString("name");
            broadcast(playerName + " left the game.");
            break;
        default:
            System.out.println("Unknown action: " + action);
            break;
    }
}
Nach dem Login kopieren

In dieser Implementierung analysieren wir zunächst die empfangene Nachricht in das JSON-Format. Anschließend überprüfen wir das Feld „Aktion“ der Nachricht und führen basierend auf den verschiedenen Vorgängen die entsprechende Aktion aus. Wenn die Aktion „Hallo“ lautet, erhalten wir den Namen des Spielers aus der Nachricht und verwenden die Broadcast-Methode, um die Willkommensnachricht an alle Spieler zu senden. Wenn die Operation „bye“ lautet, erhalten wir auch den Namen des Spielers aus der Nachricht und verwenden die Broadcast-Methode, um die Abschiedsnachricht an alle Spieler zu senden. Andernfalls geben wir eine Meldung für einen unbekannten Vorgang aus.

  1. Erstellen Sie eine Frontend-Seite

Die Frontend-Seite wird mit HTML5 und JavaScript implementiert. Wir müssen eine JavaScript-Klasse schreiben, die WebSocket implementiert. In einer JavaWeb-Anwendung können wir das WebSocket-Objekt von JavaScript verwenden, um eine WebSocket-Verbindung zu erstellen.

Das Folgende ist die JavaScript-Klasse, die WebSocket implementiert:

var webSocket = null;
var url = "ws://" + window.location.hostname + ":" + window.location.port + "/game";

function connectWebSocket() {
    if("WebSocket" in window) {
        webSocket = new WebSocket(url);

        webSocket.onopen = function(event) {
            console.log("WebSocket opened.");
        };

        webSocket.onmessage = function(event) {
            console.log("WebSocket message received: " + event.data);
            handleMessage(event.data);
        };

        webSocket.onclose = function(event) {
            console.log("WebSocket closed.");
        };
    } else {
        console.log("WebSocket is not supported by this browser.");
    }
}

function sendMessage(message) {
    if(webSocket) {
        webSocket.send(message);
    } else {
        console.log("WebSocket is not connected.");
    }
}
Nach dem Login kopieren

In dieser Implementierung prüfen wir zunächst, ob WebSocket unterstützt wird. Wenn ja, erstellen wir ein WebSocket-Objekt mit dem Konstruktor von WebSocket und weisen es der Variablen webSocket zu. Wir haben drei WebSocket-Ereignishandler definiert:

  • websocket.onopen Die Vorgänge, die beim Öffnen des WebSocket ausgeführt werden, z. B. das Initiieren einer Verbindungsanforderung an den Server.
  • websocket.onmessage definiert die Vorgänge, die WebSocket beim Empfang einer Nachricht ausführt, z. B. den Aufruf der Funktion handleMessage zum Verarbeiten der Nachricht.
  • websocket.onclose definiert, was zu tun ist, wenn WebSocket geschlossen wird, z. B. der Versuch, die Verbindung wiederherzustellen.

Wir definieren außerdem eine sendMessage-Funktion, die die Sendemethode des WebSocket-Objekts verwendet, um die Nachricht an den Server zu senden.

  1. Front-End-Interaktion implementieren

Wir werden jQuery verwenden, um Front-End-Interaktion zu implementieren und Spielnachrichten an den Server zu senden.

Das Folgende ist die Implementierung der handleMessage-Funktion:

function handleMessage(message) {
    var json = $.parseJSON(message);
    var action = json.action;
    switch (action) {
        case "hello":
            var name = json.name;
            console.log("Player " + name + " joined the game.");
            break;
        case "bye":
            var playerName = json.name;
            console.log("Player " + playerName + " left the game.");
            break;
        default:
            console.log("Unknown action: " + action);
            break;
    }
}

$(document).ready(function() {
    connectWebSocket();

    $("#btnHello").click(function(event) {
        var playerName = $("#txtName").val();
        var message = '{"action": "hello", "name": "' + playerName + '"}';
        sendMessage(message);
    });

    $("#btnBye").click(function(event) {
        var playerName = $("#txtName").val();
        var message = '{"action": "bye", "name": "' + playerName + '"}';
        sendMessage(message);
    });
});
Nach dem Login kopieren

In dieser Implementierung verwenden wir die $.parseJSON-Funktion von jQuery, um die empfangene Nachricht in das JSON-Format zu analysieren. Anschließend überprüfen wir das Feld „Aktion“ der Nachricht und führen basierend auf den verschiedenen Vorgängen die entsprechende Aktion aus. Wenn die Aktion „Hallo“ lautet, erhalten wir den Namen des Spielers aus der Nachricht und drucken die Nachricht aus, um am Spiel teilzunehmen. Wenn die Aktion „Tschüs“ lautet, erhalten wir auch den Namen des Spielers aus der Nachricht und drucken die Nachricht beim Verlassen des Spiels aus. Andernfalls geben wir eine Meldung für einen unbekannten Vorgang aus.

我们还将为两个按钮分别定义单击事件,这些事件将生成相应的JSON消息并使用'use SendMessage()函数向服务器发送消息。

  1. 测试

现在我们已经完成了Java Websocket实现在线游戏的所有工作。我们需要在Tomcat服务器上启动我们的应用程序并在浏览器中打开前端页面。我们可以使用多个浏览器测试在线游戏的功能。

下面是完整的游戏前端代码,供您参考:

<!doctype html>
<html>
<head>
    <title>WebSocket Chat</title>
    <meta charset="utf-8"/>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <script src="websockets.js"></script>
    <script>
        $(document).ready(function() {
            connectWebSocket();

            $("#btnHello").click(function(event) {
                var playerName = $("#txtName").val();
                var message = '{"action": "hello", "name": "' + playerName + '"}';
                sendMessage(message);
            });

            $("#btnBye").click(function(event) {
                var playerName = $("#txtName").val();
                var message = '{"action": "bye", "name": "' + playerName + '"}';
                sendMessage(message);
            });
        });

        function handleMessage(message) {
            var json = $.parseJSON(message);
            var action = json.action;
            switch (action) {
                case "hello":
                    var name = json.name;
                    console.log("Player " + name + " joined the game.");
                    break;
                case "bye":
                    var playerName = json.name;
                    console.log("Player " + playerName + " left the game.");
                    break;
                default:
                    console.log("Unknown action: " + action);
                    break;
            }
        }
    </script>
</head>
<body>
    <div>
        <label>Player name:</label>
        <input type="text" id="txtName"/>
        <button id="btnHello">Join game</button>
        <button id="btnBye">Leave game</button>
    </div>
</body>
</html>
Nach dem Login kopieren

结论

这篇文章主要介绍了使用Java Websocket实现在线游戏的过程。我们在Java 8和Tomcat 8中开发了一个简单的“chat”游戏,并使用HTML5和JavaScript实现了前端。我们展示了如何使用WebSocket端点,如何管理游戏会话,如何处理游戏消息,如何与前端进行交互,并提供了完整的代码示例。

Das obige ist der detaillierte Inhalt vonWie implementiert Java Websocket Online-Gaming-Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

PHP vs. Python: Verständnis der Unterschiede PHP vs. Python: Verständnis der Unterschiede Apr 11, 2025 am 12:15 AM

PHP und Python haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1.PHP eignet sich für die Webentwicklung mit einfacher Syntax und hoher Ausführungseffizienz. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit präziser Syntax und reichhaltigen Bibliotheken.

PHP: Eine Schlüsselsprache für die Webentwicklung PHP: Eine Schlüsselsprache für die Webentwicklung Apr 13, 2025 am 12:08 AM

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.

See all articles