Rumah > pembangunan bahagian belakang > tutorial php > 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
Lepaskan: 2023-06-28 09:44:01
asal
1234 orang telah melayarinya

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"
}
Salin selepas log masuk

}

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();
}
Salin selepas log masuk

}

$server: :factory(

new HttpServer(
    new WsServer(
        new Game()
    )
),
8080
Salin selepas log masuk

);

$server->run();

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:

<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>
Salin selepas log masuk

<input type="text" id="message">
<button id="send">Send</button>
<div id="messages"></div>
Salin selepas log masuk

< ;/ body>


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('');
});
Salin selepas log masuk

}); 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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan