オンライン ゲームにおける WebSocket とロング ポーリング テクノロジの実用的な応用
はじめに:
オンライン ゲームのリアルタイム要件は非常に高く、選手 素早い対応が求められます。このリアルタイム性を実現するために、開発者は多くの場合、WebSocket とロングポーリングを使用して即時通信を実現します。この記事では、オンライン ゲームにおける WebSocket とロング ポーリング テクノロジの実際の応用について説明し、具体的なコード例を示します。
1. WebSocket テクノロジーの応用
WebSocket は HTML5 の通信プロトコルで、全二重通信メカニズムを提供し、サーバーがクライアントにデータをアクティブにプッシュできるようにし、クライアントもデータを送信することができます。サーバーに。オンライン ゲームでは、リアルタイムの対話とゲーム ステータスの更新に WebSocket テクノロジーが使用されます。
サーバー側のコード例:
// 引入WebSocket库 import javax.websocket.*; import javax.websocket.server.ServerEndpoint; // 声明WebSocket端点 @ServerEndpoint("/game") public class GameEndpoint { // 当有连接建立时触发 @OnOpen public void onOpen(Session session) { // 将连接加入游戏房间 GameRoom.join(session); } // 当收到消息时触发 @OnMessage public void onMessage(String message, Session session) { // 处理游戏逻辑,更新游戏状态 GameRoom.processMessage(message, session); } // 当连接关闭时触发 @OnClose public void onClose(Session session) { // 将连接从游戏房间中移除 GameRoom.leave(session); } // 当错误发生时触发 @OnError public void onError(Throwable error) { // 处理错误信息 System.out.println("Error occurred: " + error.getMessage()); } }
クライアント側のコード例:
// 连接WebSocket服务器 var socket = new WebSocket("ws://localhost:8080/game"); // 当连接建立时触发 socket.onopen = function() { console.log("Connected to the server"); }; // 当收到消息时触发 socket.onmessage = function(event) { var message = event.data; // 处理接收到的游戏状态更新 handleGameUpdate(message); }; // 当连接关闭时触发 socket.onclose = function() { console.log("Disconnected from the server"); }; // 当发生错误时触发 socket.onerror = function(error) { console.log("Error occurred: " + error); }; // 发送消息给服务器 function sendMessage(message) { socket.send(message); }
2. ロングポーリング技術の応用
ロングポーリングとは、ブラウザとサーバー間の通信技術であり、リクエストを送信し続け、レスポンスを待ち続けることでリアルタイムな通信を実現します。オンライン ゲームでは、ロング ポーリング テクノロジを使用してサーバーにリクエストを送信し、最新のゲーム ステータスを取得します。
サーバー側のコード例:
// 处理长轮询请求的控制器 @Controller @RequestMapping("/game") public class GameController { @RequestMapping("/status") @ResponseBody public ResponseEntity<String> getStatus() { // 检查游戏状态的更新 String status = GameStatusChecker.check(); // 返回最新的游戏状态 return new ResponseEntity<>(status, HttpStatus.OK); } }
クライアント側のコード例:
// 定时发送请求以获取游戏状态 function pollGameStatus() { $.ajax({ url: "/game/status", type: "GET", dataType: "json", success: function(response) { // 处理接收到的游戏状态更新 handleGameUpdate(response); }, complete: function() { // 定时发送请求 setTimeout(pollGameStatus, 1000); } }); } // 页面加载完成后开始长轮询 $(document).ready(function() { pollGameStatus(); });
結論:
オンライン ゲームでは、WebSocket とロング ポーリングはどちらも一般的に使用されるリアルタイム通信テクノロジです。 WebSocket は、リアルタイムの対話やゲーム ステータスの更新に適した全二重通信メカニズムを提供します。ロングポーリングでは、定期的にリクエストを送信し、応答を待つことで最新のゲームステータスを取得します。開発者は、オンライン ゲームでリアルタイム インタラクションを実現するための特定のニーズに基づいて、適切な通信テクノロジを選択できます。上記のコード例は、開発者がこれらのテクノロジのアプリケーションを迅速に実装するのに役立つ参考として使用できます。
以上がWebSocketとロングポーリング技術のオンラインゲームへの実用化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。