ホームページ >バックエンド開発 >PHPチュートリアル >リアルタイムゲーム開発におけるWebSocketの活用事例

リアルタイムゲーム開発におけるWebSocketの活用事例

PHPz
PHPzオリジナル
2023-10-15 09:59:001885ブラウズ

リアルタイムゲーム開発におけるWebSocketの活用事例

リアルタイム ゲーム開発における WebSocket の適用事例

はじめに:
ネットワーク テクノロジーの継続的な発展に伴い、リアルタイム ゲームの需要も高まっています。成長しています。従来の HTTP プロトコルでは、リアルタイム ゲーム シナリオにおける即時性とリアルタイム パフォーマンスの要件を満たすことができないことがよくあります。新しい通信プロトコルとして、WebSocket はリアルタイム ゲーム開発で広く使用されています。この記事では、具体的なケースとサンプル コードを使用して、リアルタイム ゲーム開発における WebSocket のアプリケーションを検討します。

1. WebSocket とは
WebSocket は TCP に基づく全二重通信プロトコルで、サーバーとクライアント間の永続的な接続の確立を可能にし、双方向のリアルタイム通信を可能にします。 HTTP プロトコルとは異なり、WebSocket は、HTTP のようにリクエストごとに接続を閉じる必要がなく、永続的な接続を通じてサーバーとクライアントの間で双方向にデータを送信できます。

2. リアルタイム ゲームにおける WebSocket のニーズ
リアルタイム ゲームは、高い同時実行性と高いリアルタイム パフォーマンスという特徴を持ち、プレイヤーは他のプレイヤーの操作をリアルタイムで受け取り、独自の操作をリアルタイムで送信できます。従来の HTTP プロトコルはこれらのリアルタイム要件を満たすことができないため、リアルタイム ゲームでリアルタイム通信を実現するには WebSocket を使用する必要があります。

3. リアルタイム ゲームにおける WebSocket の適用例
「マルチプレイヤー バトル シューティング ゲーム」を例として、リアルタイム ゲームにおける WebSocket の適用例を説明します。

  1. プレイヤーがゲーム ルームに入る
    プレイヤーがゲーム ルームに入るとき、サーバーとの WebSocket 接続を確立する必要があります。接続リクエストを受信した後、サーバーはその後のリアルタイム通信のためにプレーヤーの WebSocket 接続情報を保存します。

サンプルコード:

// 客户端代码
const socket = new WebSocket('ws://localhost:8080/game');

socket.onopen = function() {
  console.log('WebSocket连接成功');
};

socket.onmessage = function(event) {
  console.log('收到服务器消息:', event.data);
};

socket.onclose = function(event) {
  console.log('WebSocket连接关闭');
};
# 服务器端代码(Node.js)
const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  console.log('有新的WebSocket连接');

  ws.on('message', function incoming(message) {
    console.log('收到客户端消息:', message);
  });

  ws.on('close', function close() {
    console.log('WebSocket连接关闭');
  });
});
  1. 他のプレイヤーの操作を受信
    ゲームルーム内で他のプレイヤーが操作を送信すると、サーバーがプレイヤーの操作を受信した後、操作情報を取得します。リアルタイムで他のプレイヤーに送信する必要があります。

サンプルコード:

// 客户端代码
socket.onmessage = function(event) {
  console.log('收到服务器消息:', event.data);

  // 处理其他玩家的操作
  handleOtherPlayerAction(event.data);
};
// 服务器端代码
wss.on('connection', function connection(ws) {
  // ...

  ws.on('message', function incoming(message) {
    console.log('收到客户端消息:', message);

    // 处理玩家的操作
    handlePlayerAction(message);

    // 将其他玩家的操作信息广播给所有连接的WebSocket客户端
    wss.clients.forEach(function each(client) {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });

  // ...
});
  1. 独自の操作を送信
    プレイヤーがゲーム内で操作を行うと、その操作情報をサーバーに送信する必要があります。そしてサーバーは操作ブロードキャスト情報を他のプレイヤーに送信します。

サンプルコード:

// 客户端代码
function sendAction(action) {
  socket.send(action);
}

// 玩家按下射击按钮时发送射击动作
shootButton.addEventListener('click', function() {
  sendAction('shoot');
});
// 服务器端代码
// ...

ws.on('message', function incoming(message) {
  // ...
  
  // 将其他玩家的操作信息广播给所有连接的WebSocket客户端
  wss.clients.forEach(function each(client) {
    if (client !== ws && client.readyState === WebSocket.OPEN) {
      client.send(message);
    }
  });
});

// ...

4. まとめ
WebSocket は全二重通信をサポートするプロトコルとして、リアルタイム ゲーム開発で広く使用されています。 WebSocket を介して、プレイヤーは他のプレイヤーの操作をリアルタイムで受信したり、自分の操作を送信したりすることができ、リアルタイム ゲームにおけるリアルタイム通信要件を実現します。この記事では、「マルチプレイヤー バトル シューティング ゲーム」を例として、リアルタイム ゲーム開発における WebSocket のアプリケーションを示し、対応するコード例を示します。この記事の紹介を通じて、読者がリアルタイム ゲーム開発における WebSocket の役割をより深く理解し、応用できることを願っています。

以上がリアルタイムゲーム開発におけるWebSocketの活用事例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。