Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pemprosesan mesej luar talian dan pemberitahuan luar talian sistem sembang masa nyata PHP

Pemprosesan mesej luar talian dan pemberitahuan luar talian sistem sembang masa nyata PHP

WBOY
WBOYasal
2023-08-26 09:22:51904semak imbas

Pemprosesan mesej luar talian dan pemberitahuan luar talian sistem sembang masa nyata PHP

Pemprosesan mesej luar talian dan pemberitahuan luar talian sistem sembang masa nyata PHP

Dengan perkembangan Internet, sistem sembang masa nyata menjadi semakin biasa dalam pelbagai aplikasi. Sebagai protokol sembang biasa, HTTP digunakan secara meluas dalam banyak senario. Walau bagaimanapun, HTTP ialah protokol tanpa kewarganegaraan, yang tidak menyediakan keupayaan komunikasi masa nyata. Oleh itu, kita perlu menggunakan beberapa mekanisme tambahan untuk melaksanakan sistem sembang masa nyata.

Dalam PHP, kami boleh menggunakan WebSocket untuk mencapai keupayaan komunikasi masa nyata ini. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP Ia boleh mewujudkan sambungan berterusan antara klien dan pelayan dan menyokong komunikasi masa nyata dua hala. Dalam WebSocket, pelayan boleh menghantar mesej secara aktif kepada pelanggan tanpa menunggu permintaan pelanggan.

Walau bagaimanapun, dalam sistem sembang masa nyata, pemprosesan mesej luar talian adalah keperluan biasa. Apabila pengguna berada di luar talian, kami mahu dapat menyimpan mesej pengguna dan memberitahu mereka apabila pengguna datang dalam talian. Dalam artikel ini, kami akan membincangkan cara melaksanakan pemprosesan mesej luar talian dan fungsi pemberitahuan luar talian.

Pertama, kami memerlukan pangkalan data untuk menyimpan mesej luar talian pengguna. Kita boleh menggunakan MySQL atau pangkalan data hubungan lain untuk mencapai fungsi ini. Katakan kita mempunyai jadual yang dipanggil "mesej" yang mengandungi medan berikut:

  • id: pengecam unik mesej
  • from_user: pengguna yang menghantar mesej
  • kepada_user: pengguna yang menerima mesej
  • kandungan: kandungan mesej
  • created_at: Masa penciptaan mesej

Seterusnya, kita perlu menyemak sama ada terdapat mesej luar talian apabila pengguna datang dalam talian dan menghantar mesej ini kepada pengguna. Kita boleh mengendalikan logik ini dalam acara sambungan WebSocket. Berikut ialah kod contoh mudah:

// 创建WebSocket服务器
$server = new WebSocketServer("localhost", 8080);

$server->on('open', function ($connection) {
    // 用户上线时,检查是否有离线消息
    $offlineMessages = getOfflineMessages($connection->id);
    foreach ($offlineMessages as $message) {
        $connection->send($message['content']);
    }
});

function getOfflineMessages($userId) {
    // 从数据库中查询该用户的离线消息
    $query = "SELECT * FROM messages WHERE to_user = $userId";
    // 执行查询操作并返回结果
    // ...
}

$server->run();

Dalam kod sampel di atas, apabila pengguna datang dalam talian, kami menanyakan mesej luar talian pengguna melalui fungsi getOfflineMessages dan menghantar mesej ini kepada pengguna.

Selain itu, kita juga perlu menyimpan mesej dalam pangkalan data apabila pengguna menghantar mesej, dan menolak mesej tersebut kepada pengguna sasaran apabila menerima mesej pengguna. Berikut ialah contoh kod mudah:

$server->on('message', function ($connection, $data) {
    // 解析消息数据
    $message = json_decode($data, true);

    // 将消息存入数据库
    saveMessage($message['from_user'], $message['to_user'], $message['content']);

    // 将消息推送给目标用户
    $targetConnection = getActiveConnection($message['to_user']);
    if ($targetConnection) {
        $targetConnection->send($message['content']);
    } else {
        // 目标用户不在线,将消息存入离线消息中
        saveOfflineMessage($message['from_user'], $message['to_user'], $message['content']);
    }
});

function saveMessage($fromUser, $toUser, $content) {
    // 将消息存入数据库
    // ...
}

function getActiveConnection($userId) {
    // 根据用户ID获取该用户的连接
    // ...
}

function saveOfflineMessage($fromUser, $toUser, $content) {
    // 将消息存入离线消息
    $query = "INSERT INTO messages (from_user, to_user, content) VALUES ('$fromUser', '$toUser', '$content')";
    // 执行插入操作
    // ...
}

Dalam contoh kod di atas, apabila pengguna menghantar mesej, kami mula-mula menyimpan mesej itu dalam pangkalan data. Kemudian, kami mendapatkan sambungan pengguna sasaran melalui fungsi getActiveConnection Jika pengguna sasaran berada dalam talian, mesej akan ditolak terus kepada pengguna sasaran jika pengguna sasaran tidak dalam talian, mesej akan disimpan sebagai mesej luar talian.

Melalui contoh kod di atas, kami boleh melaksanakan pemprosesan mesej luar talian dan fungsi pemberitahuan luar talian. Semasa pengguna berada di luar talian, mesej mereka akan disimpan dalam pangkalan data dan dihantar kepada mereka apabila mereka datang dalam talian. Dengan cara ini, kami boleh mengendalikan mesej luar talian dengan berkesan dan memberitahu pengguna tepat pada masanya. Pada masa yang sama, kami juga menggunakan WebSocket untuk menyediakan keupayaan sembang masa nyata, jadi pengguna boleh menerima mesej dalam masa nyata.

Ringkasnya, pemprosesan mesej luar talian dan pemberitahuan luar talian sistem sembang masa nyata PHP adalah sangat penting. Dengan mereka bentuk struktur pangkalan data dengan betul dan menggunakan WebSocket, kami boleh merealisasikan fungsi penyimpanan dan pemberitahuan mesej luar talian. Dengan cara ini, kami dapat memberikan pengguna pengalaman sembang yang lebih baik.

Atas ialah kandungan terperinci Pemprosesan mesej luar talian dan pemberitahuan luar talian sistem 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