Rumah >pembangunan bahagian belakang >tutorial php >Laksanakan perkhidmatan tolak sisi pelayan berprestasi tinggi menggunakan Memcache dan PHP

Laksanakan perkhidmatan tolak sisi pelayan berprestasi tinggi menggunakan Memcache dan PHP

WBOY
WBOYasal
2023-05-16 08:40:531198semak imbas

Dengan pembangunan berterusan teknologi Internet, keperluan prestasi kami untuk aplikasi rangkaian semakin tinggi. Di bawah premis ini, perkhidmatan tolak sisi pelayan, sebagai penyelesaian komunikasi masa nyata, diterima pakai oleh semakin banyak aplikasi. Artikel ini akan memperkenalkan cara menggunakan Memcache dan PHP untuk melaksanakan perkhidmatan tolakan sisi pelayan berprestasi tinggi.

1. Apakah perkhidmatan tolak sebelah pelayan?

Perkhidmatan tolak sisi pelayan bermaksud pelayan menghantar data secara aktif kepada klien tanpa memerlukan klien meminta data secara aktif. Sebagai contoh, dalam bilik sembang, selepas pengguna menghantar mesej, semua pengguna dalam talian boleh menerima mesej tanpa setiap pengguna perlu memintanya. Ini boleh meningkatkan prestasi masa nyata dan juga mengurangkan tekanan pada pelayan.

2. Peranan Memcache

Memcache ialah alat untuk menyimpan data. Fungsinya adalah untuk menyimpan data dalam ingatan untuk mempercepatkan pembacaan dan penulisan data. Dalam perkhidmatan tolak sisi pelayan, peranan Memcache adalah untuk cache mesej yang perlu dihantar untuk mengurangkan tekanan pada pelayan dan pangkalan data.

3. Gunakan PHP untuk melaksanakan perkhidmatan tolak sebelah pelayan

Seterusnya, kami akan menggunakan PHP untuk melaksanakan perkhidmatan tolak sebelah pelayan. Artikel ini akan menganggap bahawa kami sudah mempunyai sistem bilik sembang, yang mengandungi tiga bahagian berikut:

  1. Senarai pengguna dalam talian

Senarai pengguna dalam talian merujuk kepada senarai sedang bersembang Senarai pengguna dalam bilik. Kita perlu cache senarai pengguna dalam talian di Memcache untuk akses pantas.

  1. Senarai mesej

Senarai mesej merujuk kepada senarai mesej yang dihantar oleh semua pengguna. Kita perlu cache senarai mesej dalam Memcache untuk akses pantas. Pada masa yang sama, kita perlu menambah medan cap masa pada senarai mesej untuk memudahkan pelanggan menentukan sama ada terdapat mesej baharu.

  1. Perkhidmatan push

Perkhidmatan push merujuk kepada perkhidmatan yang secara aktif menghantar mesej yang perlu ditolak kepada pelanggan. Dalam sistem kami, kami akan menggunakan WebSocket untuk melaksanakan perkhidmatan tolak.

Berikut ialah langkah pelaksanaan terperinci:

  1. Caching senarai pengguna dalam talian

Kami boleh menambah pengguna ke senarai pengguna dalam talian apabila mereka log dalam. Kemudian, apabila pengguna log keluar, alih keluar mereka daripada senarai pengguna dalam talian. Senarai pengguna dalam talian dicache seperti berikut:

$memcache = Memcache baharu;
$memcache->addServer('localhost', 11211);

// Tambah pengguna dalam talian senarai Cache
$onlineUsers = array('user1', 'user2', 'user3');
$memcache->set('online_users', $onlineUsers, 0, 0);

// Dapatkan senarai pengguna dalam talian daripada cache
$onlineUsers = $memcache->get('online_users');

  1. Cache senarai mesej

Kita boleh Apabila pengguna menghantar mesej, tambahkannya pada senarai mesej. Kemudian, dalam perkhidmatan tolak, hantar senarai mesej kepada pelanggan. Kita perlu menambah medan cap masa pada senarai mesej untuk memudahkan pelanggan menentukan sama ada terdapat mesej baharu. Senarai mesej dicache seperti berikut:

$memcache = Memcache baharu;
$memcache->addServer('localhost', 11211);

// Tambahkan senarai mesej ke cache
$messages = array(

array('user' => 'user1', 'message' => 'hello', 'timestamp' => time()),
array('user' => 'user2', 'message' => 'world', 'timestamp' => time())

);
$memcache->set('message', $message, 0, 0);

// Dapatkan daripada cache Senarai mesej
$messages = $memcache->get('messages');

  1. Laksanakan perkhidmatan push

Kami akan menggunakan WebSocket untuk melaksanakan push perkhidmatan. WebSocket ialah protokol komunikasi masa nyata yang boleh digunakan dalam pelayar moden. Dalam PHP, kita boleh menggunakan Ratchet untuk melaksanakan WebSocket. Berikut ialah cara perkhidmatan tolak dilaksanakan:

//Perkenalkan perpustakaan Ratchet
memerlukan __DIR__.'/vendor/autoload.php';

gunakan RatchetMessageComponentInterface;
gunakan RatchetConnectionInterface;

// Perkhidmatan tolak WebSocket
class Chat melaksanakan MessageComponentInterface
{

protected $clients;

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

public function onOpen(ConnectionInterface $conn) 
{
    $this->clients->attach($conn);
}

public function onMessage(ConnectionInterface $from, $msg) 
{
    $memcache = new Memcache;
    $memcache->addServer('localhost', 11211);

    // 获取在线用户列表和消息列表
    $onlineUsers = $memcache->get('online_users');
    $messages = $memcache->get('messages');

    // 发送消息给所有客户端
    foreach ($this->clients as $client) 
    {
        $client->send(json_encode(array(
            'type' => 'message',
            'online_users' => $onlineUsers,
            'messages' => $messages
        )));
    }
}

public function onClose(ConnectionInterface $conn) 
{
    $this->clients->detach($conn);
}

public function onError(ConnectionInterface $conn, Exception $e) 
{
    $conn->close();
}

}

// Cipta pelayan WebSocket dan mulakan
$app = RatchetApp baharu ('localhost', 8080);
$app->route('/chat', new Chat);
$app->run();

4. Pelaksanaan pelanggan

Pelanggan boleh dilaksanakan menggunakan mana-mana penyemak imbas moden Berikut ialah kod HTML dan JavaScript klien:

8b05045a5be5764f313ed5b9168a17e6
100db36a723c770d327fc0aef2ce13b1<.>a801d9c20ab268ecdf000c4cd37b7338

<title>WebSocket Chat</title>

4f7e9ee3c387fa7cd73e9b3fa70c81fd

3c30aa6c4c72dd8ead30672a51b803a7

<ul id="messages"></ul>

<form action="">
    <input id="message" type="text">
    <button>Send</button>
</form>

<script>
    var ws = new WebSocket("ws://localhost:8080/chat");

    ws.onmessage = function(event) {
        var data = JSON.parse(event.data);

        // 更新在线用户列表
        var onlineUsers = data.online_users;
        for (var i = 0; i < onlineUsers.length; i++) {
            // add online user to list
        }

        // 更新消息列表
        var messages = data.messages;
        for (var i = 0; i < messages.length; i++) {
            // add message to list
        }
    };

    document.querySelector("form").addEventListener("submit", function(event) {
        event.preventDefault();
        var input = document.querySelector("input#message");
        ws.send(input.value);
        input.value = "";
    });
</script>

493a3ce9d2a3c91fa60924ecf20a1e6a

73a6ac4ed44ffec12cee46588e518a5e>
5. Ringkasan

Artikel ini memperkenalkan cara menggunakan Memcache dan PHP untuk melaksanakan perkhidmatan push sebelah pelayan berprestasi tinggi. Dengan meng-cache senarai pengguna dalam talian dan senarai mesej dalam ingatan, kami boleh mengurangkan tekanan pada pelayan dan pangkalan data. Pada masa yang sama, komunikasi masa nyata boleh dicapai menggunakan protokol WebSocket, dengan itu meningkatkan prestasi masa nyata.

Atas ialah kandungan terperinci Laksanakan perkhidmatan tolak sisi pelayan berprestasi tinggi menggunakan Memcache dan 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