Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penyegerakan berbilang peranti dan tolakan mesej fungsi sembang masa nyata PHP

Penyegerakan berbilang peranti dan tolakan mesej fungsi sembang masa nyata PHP

PHPz
PHPzasal
2023-08-26 11:01:501523semak imbas

Penyegerakan berbilang peranti dan tolakan mesej fungsi sembang masa nyata PHP

Penyegerakan berbilang peranti dan push mesej fungsi sembang masa nyata PHP

Pengenalan:
Dalam era rangkaian sosial dan pemesejan segera, fungsi sembang masa nyata telah menjadi salah satu keperluan asas banyak aplikasi web dan aplikasi mudah alih. Apabila membangunkan fungsi sembang masa nyata, kita bukan sahaja perlu melaksanakan fungsi menghantar dan menerima mesej serta-merta, tetapi juga perlu mempertimbangkan isu penyegerakan berbilang peranti dan tolakan mesej. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi sembang masa nyata dan menyelesaikan keperluan penyegerakan berbilang peranti dan tolak mesej.

1. Persediaan persekitaran
Sebelum memulakan pembangunan, kita perlu menyediakan persekitaran berikut:

  1. Persekitaran berjalan PHP: Pastikan pelayan telah mengkonfigurasi persekitaran berjalan PHP dan membolehkan sambungan yang berkaitan (seperti sambungan Swoole) untuk menyokong sambungan yang panjang dan tugasan tak segerak .
  2. Pangkalan data: Pilih pangkalan data yang sesuai untuk menyimpan data mesej, seperti MySQL atau Redis, dsb.
  3. Antara muka hadapan: Bangunkan tetingkap sembang ringkas untuk memaparkan rekod sembang dan menghantar mesej.

2. Proses pelaksanaan

  1. Sambung ke pangkalan data: Gunakan PHP untuk menyambung ke pangkalan data dan buat jadual mesej untuk menyimpan rekod sembang.

    $db = new mysqli('localhost', 'username', 'password', 'database');
    $db->query("CREATE TABLE IF NOT EXISTS messages (id INT AUTO_INCREMENT PRIMARY KEY, sender VARCHAR(50), receiver VARCHAR(50), content TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");
  2. Pengendalian mesej baharu: Simpan mesej baharu ke pangkalan data melalui permintaan POST.

    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      $sender = $_POST['sender'];
      $receiver = $_POST['receiver'];
      $content = $_POST['content'];
      
      $db->query("INSERT INTO messages (sender, receiver, content) VALUES ('$sender', '$receiver', '$content')");
      echo 'Success';
    }
  3. Pertanyaan rekod sembang: Dapatkan rekod sembang antara dua pengguna melalui permintaan GET.

    if ($_SERVER['REQUEST_METHOD'] == 'GET') {
      $sender = $_GET['sender'];
      $receiver = $_GET['receiver'];
      
      $result = $db->query("SELECT * FROM messages WHERE (sender = '$sender' AND receiver = '$receiver') OR (sender = '$receiver' AND receiver = '$sender')");
      
      $messages = [];
      while ($row = $result->fetch_assoc()) {
     $messages[] = $row;
      }
      
      echo json_encode($messages);
    }
  4. Tekan mesej masa nyata: Gunakan sambungan panjang dan tugas tak segerak untuk menolak mesej baharu kepada semua pengguna dalam talian dalam masa nyata.

    $server = new swoole_websocket_server('0.0.0.0', 9501);
    $server->on('open', function ($server, $request) {
      echo "New connection: {$request->fd}
    ";
    });
    $server->on('message', function ($server, $frame) {
      $message = json_decode($frame->data, true);
      
      // 保存到数据库
      $sender = $message['sender'];
      $receiver = $message['receiver'];
      $content = $message['content'];
      
      $db->query("INSERT INTO messages (sender, receiver, content) VALUES ('$sender', '$receiver', '$content')");
      
      // 推送给所有在线用户
      $result = $db->query("SELECT fd FROM online_users");
      while ($row = $result->fetch_assoc()) {
     $server->push($row['fd'], $frame->data);
      }
    });
    $server->on('close', function ($server, $fd) {
      echo "Connection closed: {$fd}
    ";
    });
    $server->start();
  5. Pelaksanaan bahagian hadapan: Gunakan teknologi seperti WebSocket atau Long Polling untuk mewujudkan sambungan yang panjang dengan bahagian belakang dan menerima serta menghantar mesej dalam masa nyata.

3. Prinsip pelaksanaan penyegerakan berbilang peranti masa nyata dan tolak mesej

  1. Penyegerakan berbilang peranti: Apabila setiap pengguna log masuk, bahagian belakang akan memberikannya pengecam unik (seperti ID pengguna) dan mengaitkan pengecam dengan sambungan peranti mengikat. Apabila pengguna menghantar mesej pada peranti tertentu, bahagian belakang menyimpan mesej ke pangkalan data dan menolak mesej ke semua peranti pengguna melalui pengecam.
  2. Tekan mesej: Setiap sambungan pengguna dalam talian ke bahagian belakang akan dibangkitkan dan menerima mesej tolak apabila mesej baharu tiba. Bahagian belakang boleh menentukan pengguna yang perlu menolak mesej baharu dengan mengekalkan senarai sambungan pengguna dalam talian.

Kesimpulan:
PHP melaksanakan penyegerakan berbilang peranti dan tolakan mesej fungsi sembang masa nyata adalah tugas pembangunan yang biasa. Prestasi sistem dan pengalaman pengguna boleh dipertingkatkan melalui pemilihan teknologi yang betul dan pemprosesan tak segerak. Contoh kod di atas memberikan idea pelaksanaan yang mudah, dan pembangun boleh menambah baik dan mengembangkannya mengikut keperluan sebenar. Semoga artikel ini bermanfaat kepada anda.

Atas ialah kandungan terperinci Penyegerakan berbilang peranti dan tolakan mesej fungsi sembang masa nyata 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