Maison >développement back-end >tutoriel php >Comment PHP et Unity3D utilisent Workerman pour implémenter la fonction de classement en temps réel
Comment PHP et Unity3D utilisent Workerman pour implémenter la fonction de classement en temps réel
Avec l'essor des jeux en ligne, la fonction de classement est devenue le centre d'intérêt de nombreux développeurs de jeux. Les classements en temps réel permettent aux joueurs de rivaliser et de comparer, rendant le jeu plus intéressant et plus stimulant. Cet article expliquera comment utiliser le framework PHP, Unity3D et Workerman pour implémenter la fonction de classement en temps réel.
1. Comprendre le framework Workerman
Workerman est un framework PHP asynchrone hautes performances basé sur des événements développé en PHP. Il adopte un modèle d'E/S multi-processus et non bloquant, présente une faible empreinte mémoire et des capacités de traitement de connexion simultanées élevées. Les fonctionnalités de Workerman le rendent idéal pour créer des applications en temps réel, telles que des serveurs de jeux.
2. Construire le côté serveur
Tout d'abord, nous devons installer le framework Workerman côté serveur. Vous pouvez l'installer avec la commande suivante :
composer require workerman/workerman
Créez un script PHP sur le serveur, tel que Rank_server.php. Dans ce script, nous devons initialiser Workerman, définir un tableau de classement et fournir des interfaces que le client Unity3D peut appeler.
Ce qui suit est un exemple de code simple :
<?php require_once __DIR__.'/vendor/autoload.php'; use WorkermanWorker; $rankList = array(); $worker = new Worker("websocket://0.0.0.0:2345"); $worker->count = 4; $worker->onWorkerStart = function($worker) { global $rankList; echo "Worker started! "; }; $worker->onMessage = function($connection, $data) { global $rankList; $request = json_decode($data, true); switch($request['action']) { case 'update_rank': $rankList[$request['username']] = $request['score']; break; case 'get_rank': krsort($rankList); $rankList = array_slice($rankList, 0, 10); $connection->send(json_encode($rankList)); break; default: break; } }; Worker::runAll();
Le code ci-dessus crée une instance Worker et écoute le port 2345. Dans la fonction de rappel onWorkerStart, nous initialisons le tableau de classement. Dans la fonction de rappel onMessage, le traitement correspondant est effectué en fonction de la requête reçue : s'il s'agit d'une requête de mise à jour de la liste de classement, le tableau de classement est mis à jour ; s'il s'agit d'une requête d'obtention de la liste de classement, le tableau de classement est envoyé ; au client. Notez que lors de la mise à jour du classement, nous utilisons $rankList[$request['username']] = $request['score'] pour stocker le score de l'utilisateur.
3. Écrivez le client
Utilisez WebSocket dans Unity3D pour vous connecter au serveur. Nous pouvons utiliser des plug-ins tiers tels que WebSocket-Sharp. Tout d'abord, vous devez importer le plugin WebSocket-Sharp dans l'éditeur Unity3D. Référencez ensuite l'espace de noms WebSocket dans votre code.
using WebSocketSharp;
Ce qui suit est un exemple de code pour un simple client de classement Unity3D :
using System.Collections; using UnityEngine; using WebSocketSharp; public class RankClient : MonoBehaviour { private WebSocket ws; private string serverUrl = "ws://127.0.0.1:2345"; void Start() { ws = new WebSocket(serverUrl); ws.OnOpen += OnOpen; ws.OnMessage += OnMessage; ws.Connect(); } void OnOpen(object sender, System.EventArgs e) { Debug.Log("WebSocket connected!"); } void OnMessage(object sender, MessageEventArgs e) { string msg = e.Data; // 接收到服务器发送的排行榜数据,进行处理 // ... } public void UpdateRank(string username, int score) { // 向服务器发送更新排行榜请求 string json = "{"action":"update_rank", "username":"" + username + "", "score":" + score + "}"; ws.Send(json); } public void GetRank() { // 向服务器发送获取排行榜请求 string json = "{"action":"get_rank"}"; ws.Send(json); } }
Le code ci-dessus crée une instance WebSocket dans la fonction Démarrer et se connecte au serveur. Dans la fonction de rappel OnOpen, nous pouvons gérer le succès de la connexion. Dans la fonction de rappel OnMessage, nous recevons les données de classement envoyées par le serveur et les traitons en conséquence. Dans les fonctions UpdateRank et GetRank, nous envoyons des requêtes au serveur pour mettre à jour les classements et obtenir les classements.
4. Test d'exécution
Exécutez la commande suivante dans la ligne de commande pour démarrer le serveur :
php rank_server.php start
Dans l'éditeur Unity3D, créez une scène de classement et ajoutez-la. dans Ajoutez le script RankClient à la scène. Dans un script, vous pouvez tester cela en appelant les fonctions UpdateRank et GetRank. Les classements peuvent être mis à jour en fonction de la logique du jeu et les dernières données de classement peuvent être obtenues.
Grâce à la combinaison de PHP et Unity3D avec le framework Workerman, nous pouvons facilement implémenter la fonction de classement en temps réel. Les hautes performances de Workerman et ses fonctionnalités asynchrones basées sur les événements nous permettent de répondre et de gérer rapidement un grand nombre de demandes d'utilisateurs et d'offrir une meilleure expérience de jeu. J'espère que cet article vous sera utile !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!