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:
class Game melaksanakan MessageComponentInterface
{
protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($from !== $client) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); } public function onError(ConnectionInterface $conn, Exception $e) { $conn->close(); }
$server: :factory(
new HttpServer( new WsServer( new Game() ) ), 8080
);
<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>
<input type="text" id="message"> <button id="send">Send</button> <div id="messages"></div>
$(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.
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!