Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Analisis kes sebenar PHP yang melaksanakan fungsi push mesej masa nyata

Analisis kes sebenar PHP yang melaksanakan fungsi push mesej masa nyata

PHPz
PHPzasal
2023-08-10 18:06:211027semak imbas

Analisis kes sebenar PHP yang melaksanakan fungsi push mesej masa nyata

Analisis kes praktikal PHP yang melaksanakan fungsi tolak mesej masa nyata

Pengenalan:
Tekanan mesej masa nyata ialah keperluan fungsi biasa dalam aplikasi web moden Ia boleh merealisasikan fungsi pemesejan segera dan kemas kini masa nyata daripada mesej. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi tolak mesej masa nyata melalui analisis kes praktikal dan menyediakan contoh kod yang sepadan.

Latar belakang kes:
Andaikan terdapat aplikasi web di mana pengguna boleh menghantar mesej kepada pengguna dalam talian lain melalui pelayar dan menerima mesej daripada pengguna dalam talian lain. Kami akan menggunakan PHP sebagai bahasa bahagian pelayan dan jQuery dan HTML5 WebSocket sebagai sokongan teknikal pihak pelanggan.

Pelaksanaan kod sisi pelayan:
Pertama, kita perlu mencipta pelayan WebSocket untuk menerima dan memproses permintaan sambungan pelanggan dan komunikasi mesej. Berikut ialah contoh kod pelaksanaan PHP yang dipermudahkan:

<?php
class ChatServer {
    private $clients = [];
  
    public function __construct($host, $port) {
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        socket_bind($socket, $host, $port);
        socket_listen($socket);
        $this->clients[] = $socket;
        
        while (true) {
            $sockets = $this->clients;
            socket_select($sockets, $write = NULL, $except = NULL, NULL);
          
            foreach ($sockets as $socket) {
                if ($socket == $this->clients[0]) {
                    $newSocket = socket_accept($socket);
                    $this->clients[] = $newSocket;
                    $this->sendResponse($newSocket, "Connected successfully!
");
                } else {
                    $bytes = socket_recv($socket, $buffer, 2048, 0);
                  
                    if ($bytes == 0) {
                        $index = array_search($socket, $this->clients);
                        unset($this->clients[$index]);
                        $this->sendResponse($socket, "Disconnected from server!
");
                        socket_close($socket);
                    } else {
                        $this->sendMessageToClients($socket, $buffer);
                    }
                }
            }
        }
    }
  
    private function sendResponse($socket, $message) {
        socket_write($socket, $message, strlen($message));
    }
  
    private function sendMessageToClients($senderSocket, $message) {
        foreach ($this->clients as $clientSocket) {
            if ($clientSocket != $this->clients[0] && $clientSocket != $senderSocket) {
                $this->sendResponse($clientSocket, $message);
            }
        }
    }
}
 
new ChatServer('localhost', 8080);
?>

Dalam contoh kod di atas, kami mencipta kelas ChatServer untuk mengendalikan sambungan dan komunikasi pelanggan. Kelas ini mencipta dan mengurus sambungan soket dengan menggunakan perpustakaan fungsi soket. Dalam gelung utama pelayan, kami menggunakan fungsi socket_select untuk melaksanakan komunikasi tak segerak, menerima dan memproses mesej pelanggan.

Pelaksanaan kod sebelah pelanggan:
Seterusnya, kita perlu membuat halaman HTML dan kod JavaScript yang sepadan untuk melaksanakan fungsi penghantaran dan penerimaan mesej pelanggan. Berikut ialah contoh kod yang dipermudahkan:

<!DOCTYPE html>
<html>
<head>
    <title>Real-time Chat Application</title>
</head>
<body>
    <input type="text" id="messageInput" placeholder="Enter your message" />
    <button onclick="sendMessage()">Send</button>
    <div id="messages"></div>
 
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        var socket = new WebSocket("ws://localhost:8080");
 
        socket.onopen = function(event) {
            console.log("Connection established!");
        };
 
        socket.onmessage = function(event) {
            var message = event.data;
            $("#messages").append("<p>" + message + "</p>");
        };
 
        socket.onerror = function(event) {
            console.log("Error: " + event.data);
        };
 
        function sendMessage() {
            var message = $("#messageInput").val();
            socket.send(message);
            $("#messageInput").val("");
        }
    </script>
</body>
</html>

Dalam contoh kod di atas, kami mencipta halaman HTML yang mengandungi kotak input mesej, butang hantar dan kawasan paparan mesej. Dengan menggunakan teknologi WebSocket, kami boleh mewujudkan saluran komunikasi dua hala yang berterusan antara pelanggan dan pelayan. Kod JavaScript pihak pelanggan mendengar acara WebSocket dan menghantar serta memproses mesej dengan sewajarnya.

Ringkasan:
Melalui analisis contoh di atas, kami telah mempelajari cara menggunakan PHP untuk melaksanakan fungsi tolak mesej masa nyata. Di bahagian pelayan, kami menggunakan perpustakaan fungsi soket untuk mencipta dan mengurus sambungan soket, dan melaksanakan komunikasi tak segerak melalui fungsi socket_select. Di sisi pelanggan, kami menggunakan teknologi WebSocket untuk mewujudkan saluran komunikasi dua hala yang berterusan dan menghantar serta menerima mesej melalui kod JavaScript.

Sudah tentu, contoh kod di atas hanyalah pelaksanaan yang dipermudahkan, dan banyak faktor lain perlu dipertimbangkan dalam projek sebenar, seperti penyimpanan dan kawalan mesej, pengesahan pengguna dan pengurusan kebenaran, dsb. Walau bagaimanapun, dengan memahami contoh di atas, kita boleh memahami prinsip asas dan kaedah pelaksanaan fungsi tolakan mesej masa nyata, dengan itu menyediakan rujukan dan idea tertentu untuk pembangunan selanjutnya aplikasi web.

Atas ialah kandungan terperinci Analisis kes sebenar PHP yang melaksanakan fungsi push mesej masa nyata. 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