Rumah  >  Artikel  >  rangka kerja php  >  Amalan pengaturcaraan rangkaian pekerja: membina pelayan permainan masa nyata yang cekap

Amalan pengaturcaraan rangkaian pekerja: membina pelayan permainan masa nyata yang cekap

WBOY
WBOYasal
2023-08-04 17:21:051069semak imbas

Amalan Pengaturcaraan Rangkaian Pekerja: Membina Pelayan Permainan Masa Nyata yang Cekap

Pengenalan:
Dengan peningkatan permainan masa nyata, membina pelayan rangkaian yang cekap dan boleh dipercayai telah menjadi keutamaan utama bagi pembangun permainan. Dalam artikel ini, kami akan menggunakan Workerman, rangka kerja pengaturcaraan rangkaian PHP yang sangat baik, untuk memperkenalkan cara membina pelayan permainan masa nyata yang cekap untuk memenuhi keperluan pembangunan permainan. Kami akan menerangkan secara terperinci cara untuk membangunkan dengan Workerman dan melampirkan beberapa contoh kod untuk rujukan.

1. Pengenalan kepada Workerman
Workerman ialah rangka kerja pengaturcaraan rangkaian berbilang benang sumber terbuka yang digunakan khas untuk membina pelayan dan aplikasi rangkaian berprestasi tinggi. Berbanding dengan model pembangunan PHP tradisional, Workerman mempunyai keupayaan pemprosesan serentak yang lebih tinggi dan kependaman tindak balas yang lebih rendah. Ia berdasarkan konsep reka bentuk dipacu peristiwa dan mencapai komunikasi rangkaian yang cekap melalui kaedah IO dan pelbagai proses tanpa sekatan.

2. Pasang dan konfigurasikan Workerman
Pertama, kita perlu memasang Workerman. Jalankan arahan berikut dalam baris arahan untuk memasang:

composer require workerman/workerman

Selepas pemasangan selesai, kami boleh mula menulis pelayan permainan segera kami.

3 Tulis pelayan permainan
Kami mula-mula mencipta fail bernama GameServer sebagai fail kemasukan pelayan permainan kami. Dalam fail ini, kami perlu memperkenalkan skrip pemuatan automatik Workerman dan kod logik permainan yang kami tulis sendiri. Butirannya adalah seperti berikut:

// 引入Workerman的自动加载脚本
require_once __DIR__.'/vendor/autoload.php';

use WorkermanWorker;

// 创建一个Worker监听2345端口,使用websocket协议通讯
$worker = new Worker('websocket://0.0.0.0:2345');

// 设置进程数,根据系统性能调整
$worker->count = 4;

// 当客户端连接时触发的回调函数
$worker->onConnect = function($connection)
{
    echo "New connection
";
};

// 当客户端发送消息时触发的回调函数
$worker->onMessage = function($connection, $data)
{
    // 处理客户端消息,进行游戏逻辑处理
    // ...
    // 发送游戏结果给客户端
    $connection->send($result);
};

// 当客户端断开连接时触发的回调函数
$worker->onClose = function($connection)
{
    echo "Connection closed
";
};

// 运行Worker
Worker::runAll();

Kod di atas mencipta objek Worker, mendengar port 2345 dan mengendalikan sambungan pelanggan, mesej dan peristiwa pemutusan sambungan. Kami boleh mengendalikan mesej pelanggan dalam fungsi panggil balik onMessage dan menghantar keputusan permainan kepada pelanggan.

4 Mulakan pelayan permainan
Selepas menulis kod pelayan permainan, kita boleh menggunakan baris arahan untuk memulakan pelayan:

php GameServer

5. Sekarang, kita boleh menulis halaman HTML yang ringkas sebagai permainan pelanggan, Dan gunakan WebSocket untuk sambungan pelayan dan pemesejan. Berikut ialah contoh kod mudah:

<!DOCTYPE html>
<html>
<head>
    <title>Game Client</title>
    <style type="text/css">
        #message {
            width: 300px;
            height: 200px;
            overflow: auto;
        }
    </style>
</head>
<body>
    <div id="message"></div>
    <input type="text" id="input" placeholder="输入消息">
    <button onclick="sendMessage()">发送</button>
</body>
<script>
    // 创建WebSocket对象
    var socket = new WebSocket('ws://localhost:2345');

    // 监听连接建立事件
    socket.onopen = function() {
        console.log('Connected');
    }

    // 监听服务器发送的消息事件
    socket.onmessage = function(e) {
        var messageDiv = document.getElementById('message');
        messageDiv.innerHTML += e.data + '<br>';
    }

    // 发送消息到服务器
    function sendMessage() {
        var input = document.getElementById('input');
        var message = input.value;
        socket.send(message);
        input.value = '';
    }
</script>
</html>

Kod di atas mencipta objek WebSocket, menyambung ke pelayan kami dan mendengar acara mesej yang dihantar oleh pelayan. Melalui kotak input dan butang hantar, kami boleh menghantar mesej ke pelayan dan memaparkan mesej yang diterima pada halaman.

6. Ringkasan

Melalui pengenalan artikel ini, kami telah mempelajari cara menggunakan rangka kerja Workerman untuk membina pelayan permainan masa nyata yang cekap. Workerman secara berkesan meningkatkan keupayaan pemprosesan serentak pelayan dan kelajuan tindak balas melalui mekanisme komunikasi rangkaian berprestasi tingginya. Kami telah menyediakan beberapa contoh kod ringkas dalam artikel untuk rujukan anda. Saya harap artikel ini dapat membantu pembangun yang sedang membangunkan pelayan permainan masa nyata, mempercepatkan proses pembangunan permainan dan meningkatkan pengalaman pengguna permainan.

Atas ialah kandungan terperinci Amalan pengaturcaraan rangkaian pekerja: membina pelayan permainan masa nyata yang cekap. 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