Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencapai penyegerakan data permainan masa nyata menggunakan PHP dan Websocket

Bagaimana untuk mencapai penyegerakan data permainan masa nyata menggunakan PHP dan Websocket

WBOY
WBOYasal
2023-06-28 08:52:171209semak imbas

Dengan perkembangan teknologi Internet, bidang permainan juga perlu mencapai penyegerakan data permainan masa nyata. Protokol WebSocket ialah teknologi yang digunakan untuk komunikasi dua hala antara pelanggan dan pelayan, memberikan kemungkinan penyegerakan data masa nyata.

Artikel ini akan memperkenalkan cara menggunakan PHP dan WebSocket untuk mencapai penyegerakan data permainan masa nyata Langkah-langkah pelaksanaan khusus adalah seperti berikut:

Langkah 1: Fahami WebSocket

WebSocket ialah protokol HTML5 yang menggunakan sambungan berterusan antara pelanggan dan. pelayan , mencapai komunikasi dua hala masa nyata. Selepas sambungan WebSocket diwujudkan, pelayan dan pelanggan boleh menghantar data masa nyata antara satu sama lain untuk mencapai penyegerakan masa nyata.

Langkah 2: Tulis pelayan WebSocket

Dalam PHP, kita boleh menggunakan perpustakaan Ratchet untuk melaksanakan pelayan WebSocket. Ratchet ialah perpustakaan pelaksanaan WebSocket PHP yang menggunakan ReactPHP sebagai perpustakaan acara untuk mengendalikan sambungan dan penerimaan dan penghantaran data.

Pertama, kita perlu memasang Komposer untuk menguruskan kebergantungan kita. Cipta fail composer.json dalam direktori akar projek dan tulis kod berikut:

{

"require": {
    "cboden/ratchet": "^0.4.3",
    "react/event-loop": "^1.0.0",
    "react/socket": "^1.0.0",
    "react/http": "^1.0.0"
}

}

Kemudian, jalankan arahan berikut dalam baris arahan untuk memasang Ratchet dan kebergantungannya:

composer install

Seterusnya , kami mencipta fail bernama server.php, fail ini akan menjadi titik masuk untuk pelayan WebSocket kami. Kami mencipta contoh pelayan WebSocket dalam fail ini, menggunakan kod berikut:

01e28b42ebdccf3f4c32d3e9f8e569b4run();

Kami mencipta Kelas yang dipanggil Permainan dicipta sebagai pemproses WebSocket. Kelas ini melaksanakan antara muka MessageComponentInterface Ratchet ralat berlaku.

Dalam kelas Permainan, kami menggunakan objek SplObjectStorage untuk menyimpan semua pelanggan yang bersambung. Dalam kaedah onOpen, kami melampirkan objek sambungan ke SplObjectStorage. Dalam kaedah onMessage, kami mengulangi semua pelanggan dalam SplObjectStorage dan menghantar mesej yang diterima. Dalam kaedah onClose, kami mengalih keluar objek sambungan daripada SplObjectStorage.

Akhir sekali, kami mencipta dan menjalankan pelayan WebSocket menggunakan kelas IoServer. Kami membungkus HttpServer dan WsServer bersama-sama supaya kami boleh mengendalikan kedua-dua permintaan HTTP dan WebSocket. Kami menggunakan 8080 sebagai nombor port untuk pelayan WebSocket, anda boleh menukarnya jika perlu.

Langkah 3: Tulis klien WebSocket

Pada klien, kami menggunakan JavaScript untuk melaksanakan sambungan WebSocket. Dalam JavaScript, kita perlu mencipta objek WebSocket dan menyambung ke pelayan. Apabila keadaan objek WebSocket berubah, pengendali acara WebSocket akan dipanggil untuk diproses.

Di sini, kami akan menggunakan jQuery untuk memanipulasi elemen DOM dan mengendalikan acara dengan mudah. Kami mula-mula mencipta kotak input teks ringkas dan butang dalam HTML untuk menghantar mesej ke pelayan:

100db36a723c770d327fc0aef2ce13b1

93f0f5c25f18dab9d176bd4f6de5d30e

<title>Real-time Game Data Synchronization</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="client.js"></script>

9c3bca370b5104690d9ef395f2c5f8d1

6c04bd5ca3fcae76e30b72ad730ca86d

<input type="text" id="message">
<button id="send">Send</button>
<div id="messages"></div>

< ;/ body>

73a6ac4ed44ffec12cee46588e518a5e

Kemudian, kami mencipta fail JavaScript yang dipanggil client.js yang akan menjadi titik masuk untuk klien WebSocket kami. Kami mencipta sambungan WebSocket dalam fail ini, menggunakan kod berikut:


$(document).ready(function() {

var conn = new WebSocket('ws://localhost:8080');

conn.onopen = function(evt) {
    console.log('Connected to server');
};

conn.onmessage = function(evt) {
    console.log('Received message: ' + evt.data);
    $('#messages').append($('<p>').text(evt.data));
};

conn.onclose = function(evt) {
    console.log('Connection closed');
};

$('#send').click(function() {
    var message = $('#message').val();
    conn.send(message);
    $('#message').val('');
});

}); Kami mula-mula membuat sambungan WebSocket apabila halaman selesai dimuatkan, dan apabila sambungan dibuka Panggil kaedah onopen. Dalam kaedah onmessage, kami mengeluarkan mesej yang diterima ke konsol dan kotak mesej pada halaman. Apabila sambungan ditutup, kami akan memanggil kaedah onclose.

Pada butang klik, kami mendapat mesej daripada kotak input teks dan menghantarnya ke pelayan WebSocket.

Langkah 4: Uji sambungan WebSocket

Akhir sekali, kami boleh menggunakan penyemak imbas untuk menguji sambungan WebSocket secara setempat. Untuk menjalankan pelayan WebSocket kami pada baris arahan, laksanakan arahan berikut:

php server.php

Kemudian, buka pelayar dan masukkan URL berikut:

http://localhost:8000/

Kita boleh menaip pada mesej halaman dan klik butang "Hantar", yang kemudiannya menerima mesej pada pelayan dan menghantarnya kembali kepada klien. Anda sepatutnya melihat kotak mesej pada halaman dan mesej yang sepadan dalam output konsol.

Pada ketika ini, kami telah berjaya melaksanakan penyegerakan data permainan masa nyata menggunakan PHP dan WebSocket. Penyegerakan data masa nyata bukan sahaja tersedia dalam permainan, tetapi juga dalam pelbagai aplikasi, seperti sembang langsung dan pengeditan kolaboratif. Saya harap artikel ini dapat membantu anda memahami cara WebSocket berfungsi dan membimbing anda melalui pelaksanaan WebSocket.

Atas ialah kandungan terperinci Bagaimana untuk mencapai penyegerakan data permainan masa nyata menggunakan PHP dan Websocket. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn