Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Sembang kumpulan dan fungsi sembang peribadi sistem sembang masa nyata berdasarkan PHP

Sembang kumpulan dan fungsi sembang peribadi sistem sembang masa nyata berdasarkan PHP

王林
王林asal
2023-08-27 14:43:47915semak imbas

Sembang kumpulan dan fungsi sembang peribadi sistem sembang masa nyata berdasarkan PHP

Fungsi sembang kumpulan dan sembang peribadi sistem sembang masa nyata berasaskan PHP

Dengan perkembangan Internet, sistem sembang masa nyata menjadi semakin penting dalam kehidupan seharian kita. Sama ada anda berbual dengan rakan di platform media sosial atau berkomunikasi dengan rakan sekerja di tempat kerja, sistem sembang langsung memainkan peranan penting. Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan sistem berasaskan sembang masa nyata yang menyokong sembang kumpulan dan fungsi sembang peribadi.

Pertama, kita perlu menyediakan pelayan untuk mengendalikan permintaan sembang masa nyata. Kami menggunakan PHP dan WebSocket untuk melaksanakan fungsi ini. WebSocket ialah protokol berasaskan TCP yang membenarkan komunikasi dupleks penuh antara penyemak imbas dan pelayan. Dalam PHP, kita boleh menggunakan perpustakaan Ratchet untuk mencipta pelayan WebSocket.

Pertama, kita perlu memasang perpustakaan Ratchet. Jalankan arahan berikut dalam terminal:

composer require cboden/ratchet

Selepas pemasangan selesai, kita boleh mencipta fail bernama server.php dan menulis kod berikut di dalamnya: server.php的文件,并在其中编写以下代码:

<?php
require 'vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetWebSocketWsServer;
use RatchetHttpHttpServer;
use RatchetServerIoServer;
use RatchetWampWampServerProtocol;

class Chat implements MessageComponentInterface
{
    protected $clients;

    public function __construct()
    {
        $this->clients = new SplObjectStorage;
    }

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

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 处理客户端发送的消息
        $data = json_decode($msg);
        $type = $data->type;

        switch ($type) {
            case 'register':
                $from->username = $data->username;
                echo "User registered: " . $from->username . "
";
                break;
            case 'group':
                $message = $data->message;
                $this->broadcastMessage($from, $message);
                break;
            case 'private':
                $recipient = $data->recipient;
                $message = $data->message;
                $this->sendPrivateMessage($from, $recipient, $message);
                break;
        }
    }

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

    public function broadcastMessage($from, $message)
    {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($message);
            }
        }
    }

    public function sendPrivateMessage($from, $recipient, $message)
    {
        foreach ($this->clients as $client) {
            if ($client->username == $recipient) {
                $client->send($message);
                $from->send($message);
                break;
            }
        }
    }
}

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

$server->run();

在上述代码中,我们创建了一个名为Chat的类来处理连接、发送消息和关闭连接等操作。在onMessage方法中,我们根据消息类型来执行不同的操作。如果类型是register,表示有用户注册连接;如果类型是group,表示有用户发送群组消息;如果类型是private,表示有用户发送私聊消息。我们使用broadcastMessage方法来广播群组消息,使用sendPrivateMessage方法来发送私聊消息。

接下来,我们可以创建一个名为index.html的文件,并在其中编写以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Chat</title>
</head>
<body>
    <input type="text" id="username" placeholder="Username"><br>
    <input type="text" id="message" placeholder="Message"><br>
    <button onclick="register()">Register</button>
    <button onclick="sendGroupMessage()">Send Group Message</button>
    <button onclick="sendPrivateMessage()">Send Private Message</button>

    <script>
        var conn = new WebSocket('ws://localhost:8080');

        conn.onopen = function(e) {
            console.log("Connection established!");
        };

        conn.onmessage = function(e) {
            var chatbox = document.getElementById("chatbox");
            chatbox.innerHTML += e.data + "<br>";
        };

        function register() {
            var username = document.getElementById("username").value;
            var data = {
                type: 'register',
                username: username
            };
            conn.send(JSON.stringify(data));
        }

        function sendGroupMessage() {
            var message = document.getElementById("message").value;
            var data = {
                type: 'group',
                message: message
            };
            conn.send(JSON.stringify(data));
        }

        function sendPrivateMessage() {
            var recipient = document.getElementById("username").value;
            var message = document.getElementById("message").value;
            var data = {
                type: 'private',
                recipient: recipient,
                message: message
            };
            conn.send(JSON.stringify(data));
        }
    </script>
</body>
</html>

在上述代码中,我们创建了一个WebSocket连接并注册了连接的回调函数。在register函数中,我们将用户名发送到服务器以进行注册。在sendGroupMessage函数中,我们将群组消息发送到服务器,服务器会将消息广播给所有用户。在sendPrivateMessage函数中,我们将私聊消息发送给指定用户。

现在,我们可以在终端中运行php server.php命令来启动服务器。然后,我们可以在浏览器中打开index.htmlrrreee

Dalam kod di atas, kita buat Kelas bernama Sembang dicipta untuk mengendalikan operasi seperti menyambung, menghantar mesej dan menutup sambungan. Dalam kaedah onMessage, kami melakukan operasi yang berbeza berdasarkan jenis mesej. Jika jenisnya ialah register, ini bermakna pengguna telah mendaftarkan sambungan jika jenisnya ialah group, ini bermakna pengguna telah menghantar mesej kumpulan; adalah pribadi, Menunjukkan bahawa pengguna telah menghantar mesej peribadi. Kami menggunakan kaedah broadcastMessage untuk menyiarkan mesej kumpulan dan kaedah sendPrivateMessage untuk menghantar mesej peribadi.


Seterusnya, kita boleh mencipta fail yang dipanggil index.html dan menulis kod berikut di dalamnya:

rrreee🎜Dalam kod di atas, kami membuat sambungan WebSocket dan mendaftarkan fungsi panggil balik sambungan. Dalam fungsi register, kami menghantar nama pengguna ke pelayan untuk pendaftaran. Dalam fungsi sendGroupMessage, kami menghantar mesej kumpulan ke pelayan, dan pelayan akan menyiarkan mesej itu kepada semua pengguna. Dalam fungsi sendPrivateMessage, kami menghantar mesej peribadi kepada pengguna yang ditentukan. 🎜🎜Kini, kita boleh menjalankan perintah php server.php dalam terminal untuk memulakan pelayan. Kemudian, kita boleh membuka fail index.html dalam penyemak imbas, masukkan nama pengguna dan klik butang pendaftaran. Seterusnya, kita boleh memasukkan mesej dan klik butang hantar untuk mengadakan sembang kumpulan atau sembang peribadi. Pelayan menyiarkan mesej yang sepadan kepada pengguna lain atau menghantarnya kepada pengguna tertentu. 🎜🎜Ringkasan: 🎜Artikel ini memperkenalkan cara menggunakan PHP dan WebSocket untuk membangunkan sistem sembang masa nyata dan melaksanakan sembang kumpulan dan fungsi sembang peribadi. Dengan mencipta pelayan WebSocket dan berkomunikasi dengannya, kami boleh mendapatkan dan menghantar mesej daripada pengguna lain dalam masa nyata. Dengan contoh kod mudah, kami melaksanakan sistem sembang masa nyata asas. Dengan memanjangkan kod, kami boleh melaksanakan lebih banyak fungsi, seperti menambah pengesahan pengguna, storan rekod sembang, dsb. 🎜

Atas ialah kandungan terperinci Sembang kumpulan dan fungsi sembang peribadi sistem sembang masa nyata berdasarkan PHP. 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