Rumah >pangkalan data >Redis >Melaksanakan fungsi sembang masa nyata menggunakan PHP dan Redis: Cara mengendalikan pemesejan segera

Melaksanakan fungsi sembang masa nyata menggunakan PHP dan Redis: Cara mengendalikan pemesejan segera

WBOY
WBOYasal
2023-07-31 23:20:10769semak imbas

Menggunakan PHP dan Redis untuk melaksanakan fungsi sembang masa nyata: cara mengendalikan komunikasi segera

Pengenalan:
Dengan perkembangan Internet, komunikasi segera telah menjadi bahagian yang amat diperlukan dalam kehidupan seharian manusia. Fungsi sembang masa nyata diperlukan dalam banyak aplikasi, seperti media sosial, platform e-dagang, perkhidmatan pelanggan dalam talian, dsb. Artikel ini akan memperkenalkan cara menggunakan PHP dan Redis untuk melaksanakan fungsi sembang masa nyata dan menyediakan contoh kod.

1. Apakah itu Redis?
Redis ialah pangkalan data cache sumber terbuka yang menyokong pelbagai struktur data seperti rentetan, senarai, set, cincang, dsb. Salah satu ciri Redis ialah operasi baca dan tulis ingatannya yang cekap, yang menjadikannya pilihan ideal untuk melaksanakan fungsi sembang masa nyata.

2 Menyediakan persekitaran dan persediaan:
Sebelum anda bermula, anda perlu memastikan anda telah memasang PHP dan Redis dan memulakan pelayan Redis. Anda boleh memuat turun versi PHP terkini dari laman web rasmi PHP dan dapatkan versi Redis terkini dari laman web rasmi Redis.

3 Cipta bilik sembang ringkas:
Dalam contoh ini, kami akan mencipta ruang sembang ringkas di mana pengguna boleh menghantar mesej melalui penyemak imbas dan menerima mesej yang dihantar oleh pengguna lain dalam masa nyata. Berikut ialah contoh kod yang diperlukan untuk melaksanakan fungsi ini:

  1. index.php
<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js"></script>
    <script>
        var socket = io.connect('http://localhost:3000');
        
        socket.on('chat', function(data){
            var message = data.username + ": " + data.message;
            var chatBox = document.getElementById('chatBox');
            chatBox.innerHTML += "<p>" + message + "</p>";
        });
        
        function sendMessage() {
            var message = document.getElementById('message').value;
            var username = document.getElementById('username').value;
            
            socket.emit('chat', {message: message, username: username});
        }
    </script>
</head>
<body>
    <div id="chatBox"></div>
    <input type="text" id="username" placeholder="请输入用户名">
    <input type="text" id="message" placeholder="请输入消息">
    <button onclick="sendMessage()">发送</button>
</body>
</html>
  1. server.php
<?php
require __DIR__ . '/vendor/autoload.php';

use PsrHttpMessageServerRequestInterface;
use RatchetMessageComponentInterface;
use RatchetHttpHttpServer;
use RatchetServerIoServer;
use RatchetWebSocketWsServer;

class Chat implements MessageComponentInterface {
    protected $clients;
    protected $redis;

    public function __construct() {
        $this->clients = new SplObjectStorage();
        $this->redis = new Redis();
        $this->redis->connect('127.0.0.1', 6379);
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        $data = json_decode($msg, true);
        $username = $data['username'];
        $message = $data['message'];

        $chatData = array(
            'username' => $username,
            'message' => $message
        );

        $this->redis->lpush('chat', json_encode($chatData));
        $this->redis->ltrim('chat', 0, 9);

        foreach ($this->clients as $client) {
            $client->send(json_encode($chatData));
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected
";
    }

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "An error has occurred: {$e->getMessage()}
";

        $conn->close();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    3000
);

$server->run();

Analisis kod:

  • index.php ialah halaman hujung hadapan ruang sembang ditubuhkan dengan pelayan melalui WebSocket Connect dan menerima serta memaparkan mesej daripada pengguna lain dalam masa nyata.
  • server.php ialah kod sebelah pelayan Ia menggunakan perpustakaan Ratchet untuk mencipta pelayan WebSocket, mengendalikan sambungan pengguna, penghantaran mesej dan operasi lain, dan melaksanakan penyimpanan dan siaran mesej melalui Redis.

4. Jalankan ujian:

  1. Buka terminal, masukkan direktori yang mengandungi server.php, jalankan arahan berikut untuk memulakan pelayan:

    php server.php
  2. Buka index.php dalam penyemak imbas, masukkan nama pengguna dan mesej, klik butang Hantar.
  3. Buka index.php sekali lagi dalam penyemak imbas lain, masukkan nama pengguna dan mesej lain, dan klik butang hantar.
  4. Anda akan mendapati bahawa semua pengguna yang disambungkan ke bilik sembang boleh menerima mesej yang dihantar oleh pengguna lain dalam masa nyata dan memaparkannya pada halaman.

Ringkasan:
Melalui gabungan PHP dan Redis, kami berjaya melaksanakan fungsi sembang masa nyata yang ringkas. Sudah tentu, ini hanyalah contoh asas, anda boleh memanjangkan dan mengoptimumkan fungsi ini mengikut keperluan anda sendiri. Fungsi sembang langsung sangat berguna dalam banyak aplikasi, saya harap artikel ini akan membantu anda.

Atas ialah kandungan terperinci Melaksanakan fungsi sembang masa nyata menggunakan PHP dan Redis: Cara mengendalikan pemesejan segera. 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