Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP membangunkan kumpulan pengguna dan fungsi langganan sistem sembang masa nyata

PHP membangunkan kumpulan pengguna dan fungsi langganan sistem sembang masa nyata

WBOY
WBOYasal
2023-08-12 11:46:511027semak imbas

PHP membangunkan kumpulan pengguna dan fungsi langganan sistem sembang masa nyata

Pembangunan PHP kumpulan pengguna dan fungsi langganan sistem sembang masa nyata

Dalam era Internet sosial hari ini, sistem sembang masa nyata telah menjadi alat penting untuk komunikasi harian orang ramai. Untuk memberikan pengalaman pengguna yang lebih baik, kami perlu melaksanakan fungsi kumpulan pengguna dan langganan supaya pengguna boleh membuat dan menyertai kumpulan dengan mudah serta melanggan kandungan yang diminati.

Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan kumpulan pengguna dan fungsi langganan sistem sembang masa nyata. Kami akan menggunakan WebSocket untuk melaksanakan fungsi komunikasi masa nyata dan menggabungkannya dengan pangkalan data MySQL untuk mengendalikan maklumat pengguna dan kumpulan.

Pertama, kita perlu membina rangka kerja sistem sembang masa nyata asas. Berikut ialah contoh pelayan WebSocket mudah, dilaksanakan menggunakan perpustakaan Ratchet:

require 'vendor/autoload.php';

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

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

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

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

    public function onMessage(ConnectionInterface $from, $msg) {
        // 处理收到的消息
    }

    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()
        )
    ),
    8080
);

$server->run();

Contoh di atas mencipta kelas WebSocket bernama Chat untuk mengendalikan acara pembukaan, pemesejan dan penutup sambungan. Di mana $this->clients ialah objek SplObjectStorage yang menyimpan semua sambungan klien dan $this->groups ialah Array simpan kumpulan maklumat. $this->clients是一个保存所有客户端连接的SplObjectStorage对象,$this->groups是一个保存群组信息的数组。

接下来,我们需要添加一些方法来实现用户加入群组和订阅功能。在Chat类中添加以下代码:

public function joinGroup(ConnectionInterface $conn, $groupId) {
    // 将用户加入群组
    $this->groups[$groupId][] = $conn;
    echo "User ({$conn->resourceId}) joined group {$groupId}
";
}

public function leaveGroup(ConnectionInterface $conn, $groupId) {
    // 将用户从群组中移除
    $index = array_search($conn, $this->groups[$groupId]);
    if ($index !== false) {
        unset($this->groups[$groupId][$index]);
        echo "User ({$conn->resourceId}) left group {$groupId}
";
    }
}

public function subscribe(ConnectionInterface $conn, $topic) {
    // 订阅某个主题
    $conn->topics[] = $topic;
    echo "User ({$conn->resourceId}) subscribed to {$topic}
";
}

public function unsubscribe(ConnectionInterface $conn, $topic) {
    // 取消订阅某个主题
    $index = array_search($topic, $conn->topics);
    if ($index !== false) {
        unset($conn->topics[$index]);
        echo "User ({$conn->resourceId}) unsubscribed from {$topic}
";
    }
}

以上代码中,joinGroup方法将用户加入指定的群组,leaveGroup方法将用户从群组中移除,subscribe方法将用户订阅指定的主题,unsubscribe

Seterusnya, kami perlu menambah beberapa kaedah untuk membolehkan pengguna menyertai kumpulan dan melanggan. Tambahkan kod berikut pada kelas Sembang:

CREATE TABLE `users` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL
);

CREATE TABLE `groups` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(255) NOT NULL
);

CREATE TABLE `group_user` (
  `group_id` int(11) UNSIGNED NOT NULL,
  `user_id` int(11) UNSIGNED NOT NULL,
  PRIMARY KEY (`group_id`, `user_id`),
  FOREIGN KEY (`group_id`) REFERENCES `groups`(`id`),
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`)
);

Dalam kod di atas, kaedah joinGroup menambah pengguna kepada kumpulan yang ditentukan dan kaedah leaveGroup mengalih keluar pengguna daripada kumpulan. Kaedah langgan melanggan pengguna kepada topik tertentu dan kaedah nyahlanggan membatalkan langganan pengguna kepada topik. Apabila pengguna menyertai kumpulan atau melanggan topik, kami perlu menyimpan maklumat yang berkaitan ke pangkalan data.

Berikut ialah contoh struktur jadual pangkalan data untuk menyimpan maklumat pengguna dan kumpulan:

public function joinGroup(ConnectionInterface $conn, $groupId) {
    // 将用户加入群组
    // ...

    // 将用户加入数据库
    $userId = $_SESSION['user_id']; // 假设用户登录时已经保存用户ID到session中
    $query = "INSERT INTO group_user (group_id, user_id) VALUES (?, ?)";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("ii", $groupId, $userId);
    $stmt->execute();
}

public function subscribe(ConnectionInterface $conn, $topic) {
    // 订阅某个主题
    // ...

    // 将订阅信息保存到数据库
    $userId = $_SESSION['user_id'];
    $query = "INSERT INTO subscriptions (user_id, topic) VALUES (?, ?)";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("is", $userId, $topic);
    $stmt->execute();
}

Apabila pengguna menyertai kumpulan atau melanggan topik, kami boleh menggunakan kod berikut untuk memasukkan maklumat yang berkaitan ke dalam pangkalan data berdasarkan Pengubahsuaian berdasarkan keperluan sebenar:

rrreee

Kami juga boleh melaksanakan beberapa fungsi lain, seperti mendapatkan kumpulan pengguna atau topik yang dilanggan daripada pangkalan data, dan menghantar mesej yang diterima ke sambungan yang berkaitan. 🎜🎜Melalui pelaksanaan di atas, kami telah berjaya melaksanakan kumpulan pengguna dan fungsi langganan dalam sistem sembang masa nyata yang dibangunkan dalam PHP. Dengan cara ini, pengguna boleh membuat dan menyertai kumpulan dengan mudah, melanggan kandungan yang diminati dan mendapat pengalaman komunikasi yang lebih baik dalam sistem sembang masa nyata. 🎜

Atas ialah kandungan terperinci PHP membangunkan kumpulan pengguna dan fungsi langganan sistem sembang 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