Rumah  >  Artikel  >  rangka kerja php  >  Pengaturcaraan Rangkaian Pekerja Lanjutan: Melaksanakan Sistem Pemesejan Segera Selaras Tinggi

Pengaturcaraan Rangkaian Pekerja Lanjutan: Melaksanakan Sistem Pemesejan Segera Selaras Tinggi

WBOY
WBOYasal
2023-08-05 16:09:071055semak imbas

Pengaturcaraan Rangkaian Pekerja Lanjutan: Melaksanakan Sistem Pemesejan Segera Selaras Tinggi

Dengan populariti Internet mudah alih, sistem pemesejan segera memainkan peranan yang semakin penting dalam kehidupan kita. Melaksanakan sistem pemesejan segera yang sangat serentak adalah peristiwa penting untuk mempelajari pengaturcaraan rangkaian. Dalam artikel ini, kami akan menggunakan rangka kerja Workerman untuk melaksanakan sistem pemesejan segera yang sangat serentak dan memperkenalkan proses pelaksanaan secara terperinci melalui contoh kod.

Pertama, kita perlu memasang rangka kerja Workerman. Workerman ialah rangka kerja pengaturcaraan rangkaian tak segerak PHP yang ringan Ia menyediakan fungsi pengaturcaraan rangkaian yang kaya dan boleh memenuhi keperluan kami untuk melaksanakan sistem pemesejan segera berkonkurensi tinggi. Workerman boleh dipasang melalui komposer dan jalankan arahan berikut:

composer require workerman/workerman

Selepas pemasangan selesai, kita boleh mula menulis kod untuk melaksanakan sistem pemesejan segera konkurensi tinggi.

  1. Buat kelas pelayan

Pertama, kami mencipta kelas pelayan untuk mengendalikan sambungan pelanggan dan penghantaran mesej. Contoh kod adalah seperti berikut:

use WorkermanWorker;

class ChatServer
{
    protected $clients;
    
    public function __construct()
    {
        $this->clients = new SplObjectStorage;
        
        $ws_worker = new Worker('websocket://0.0.0.0:8000');
        
        $ws_worker->onConnect = function($connection) {
            $this->clients->attach($connection);
            echo "New client connected
";
        };
        
        $ws_worker->onMessage = function($connection, $data) {
            // 处理接收到的消息
            foreach ($this->clients as $client) {
                $client->send($data);
            }
        };
        
        $ws_worker->onClose = function($connection) {
            $this->clients->detach($connection);
            echo "Client disconnected
";
        };
        
        Worker::runAll();
    }
}

new ChatServer();

Dalam kod di atas, kami mula-mula mencipta objek Workerman Worker dan menetapkan alamat pendengaran dan portnya ke websocket://0.0.0.0:8000. Kemudian tiga fungsi panggil balik ditakrifkan untuk mengendalikan sambungan pelanggan, mesej yang diterima dan pemutusan sambungan masing-masing. Dalam fungsi panggil balik onConnect, kami menggunakan SplObjectStorage untuk menyimpan semua objek sambungan klien. Dalam fungsi panggil balik onMessage, kami mengulangi semua objek sambungan klien dan menghantar mesej yang diterima kepada setiap pelanggan. Dalam fungsi panggil balik onClose, kami memadamkan objek klien yang terputus daripada SplObjectStorage.

  1. Buat halaman pelanggan

Seterusnya, kami mencipta halaman pelanggan untuk menyambung ke pelayan dan menghantar serta menerima mesej. Contoh kod adalah seperti berikut:

<!DOCTYPE html>
<html>
<head>
    <title>Chat App</title>
    <style>
        #messages {
            height: 300px;
            overflow-y: scroll;
        }
    </style>
</head>
<body>
    <div id="messages"></div>
    <form id="form">
        <input type="text" id="message" autocomplete="off">
        <button>Send</button>
    </form>

    <script>
        const messages = document.getElementById('messages');
        const form = document.getElementById('form');
        const input = document.getElementById('message');
        
        const ws = new WebSocket('ws://localhost:8000');
        
        ws.onopen = function() {
            console.log('Connected to the server');
        };
        
        ws.onmessage = function(event) {
            const message = document.createElement('div');
            message.textContent = event.data;
            messages.appendChild(message);
        };
        
        form.addEventListener('submit', function(event) {
            event.preventDefault();
            
            const message = input.value;
            input.value = '';
            
            ws.send(message);
        });
    </script>
</body>
</html>

Dalam kod di atas, kami mencipta objek sambungan soket web dan menyambung ke alamat pelayan ws://localhost:8000. Kemudian fungsi pengendali untuk acara onopen, onmessage dan serah ditakrifkan. Dalam fungsi panggil balik onmessage, kami mencipta elemen div dan menambah mesej yang diterima pada elemen div, dan kemudian menambah elemen div pada elemen mesej pada halaman. Dalam fungsi pengendali acara hantar, kami mendapat teks dalam kotak input dan menghantarnya ke pelayan.

  1. Jalankan kod

Simpan dua keping kod di atas sebagai fail server.php dan client.html masing-masing. Jalankan arahan berikut dalam baris arahan:

php server.php start

Kemudian buka fail client.html dalam pelayar anda. Anda boleh mengakses halaman sistem pemesejan segera yang dilaksanakan melalui WebSocket. Selepas berbilang pelanggan menyambung ke pelayan, mesej boleh dihantar dalam masa nyata dan dipaparkan dalam senarai mesej.

Ringkasan:

Melalui contoh kod di atas, kami telah melaksanakan sistem pemesejan segera berkonkurensi tinggi berdasarkan rangka kerja Workerman daripada membuat kelas pelayan kepada mencipta halaman pelanggan. Dengan mengkaji contoh ini, kami mempunyai pemahaman yang lebih mendalam tentang pemprosesan konkurensi tinggi dalam pengaturcaraan rangkaian. Pada masa yang sama, kami juga mengetahui tentang kuasa dan kesederhanaan rangka kerja Workerman, yang membolehkan kami membangunkan aplikasi rangkaian berkuasa dengan lebih cepat. Saya harap artikel ini akan membantu anda mempelajari pengaturcaraan rangkaian dan menggunakan rangka kerja Workerman.

Atas ialah kandungan terperinci Pengaturcaraan Rangkaian Pekerja Lanjutan: Melaksanakan Sistem Pemesejan Segera Selaras Tinggi. 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