Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penyelesaian tolakan mesej masa nyata yang dilaksanakan oleh PHP dan Elasticsearch

Penyelesaian tolakan mesej masa nyata yang dilaksanakan oleh PHP dan Elasticsearch

WBOY
WBOYasal
2023-07-08 12:33:071357semak imbas

Penyelesaian push mesej masa nyata yang dilaksanakan oleh PHP dan Elasticsearch

Dengan perkembangan teknologi Internet dan perubahan berterusan dalam keperluan pengguna, push mesej masa nyata telah menjadi fungsi yang diperlukan untuk banyak aplikasi dan tapak web. Walaupun kaedah pengundian tradisional boleh mencapai push mesej masa nyata, ia tidak cekap dan menggunakan banyak sumber pelayan. Menggunakan PHP dan Elasticsearch untuk melaksanakan push mesej masa nyata boleh meningkatkan kecekapan dan prestasi tolak.

Elasticsearch ialah enjin carian dan analisis yang diedarkan dengan ciri prestasi tinggi analisis dan carian data masa nyata. Sebagai bahasa pengaturcaraan bahagian belakang yang biasa digunakan, PHP mempunyai kebolehskalaan yang baik, dan gabungan dengan Elasticsearch dapat merealisasikan fungsi tolakan mesej masa nyata.

Pertama, kita perlu memasang perpustakaan pergantungan yang berkaitan Elasticsearch dan PHP. Perpustakaan pergantungan PHP boleh diuruskan melalui Komposer Untuk kaedah pemasangan tertentu, sila rujuk dokumentasi rasmi Komposer. Selepas pemasangan selesai, kami boleh mula menulis kod untuk push mesej masa nyata.

Mula-mula, sambungkan perkhidmatan Elasticsearch dalam kod PHP. Anda boleh menggunakan perpustakaan klien PHP Elasticsearch untuk menyambung Kod khusus adalah seperti berikut:

require 'vendor/autoload.php';

use ElasticsearchClientBuilder;

$client = ClientBuilder::create()->build();

Seterusnya, kita perlu mencipta indeks Elasticsearch untuk menyimpan data mesej. Indeks boleh dibuat menggunakan kod berikut:

$params = [
    'index' => 'messages',
    'body' => [
        'settings' => [
            'number_of_shards' => 1,
            'number_of_replicas' => 0,
        ],
        'mappings' => [
            'properties' => [
                'message' => [
                    'type' => 'text',
                ],
            ],
        ],
    ],
];

$response = $client->indices()->create($params);

Selepas mencipta indeks, kita boleh mula menerima dan memproses mesej yang dihantar oleh pelanggan.

while (true) {
    // 接收客户端消息
    $message = $_POST['message'];

    // 插入数据到Elasticsearch索引
    $params = [
        'index' => 'messages',
        'id' => uniqid(),
        'body' => [
            'message' => $message,
        ],
    ];

    $response = $client->index($params);

    // 推送消息给其他在线用户
    $params = [
        'index' => 'messages',
        'body' => [
            'query' => [
                'match_all' => new stdClass(),
            ],
        ],
    ];

    $response = $client->search($params);

    foreach ($response['hits']['hits'] as $hit) {
        // 发送消息给在线用户
        send_message_to_user($hit['_source']['message']);
    }
}

Dalam kod di atas, kami menggunakan gelung tak terhingga untuk menerima dan memproses mesej masa nyata yang dihantar oleh pelanggan. Pertama, mesej diterima dan dimasukkan ke dalam indeks Elasticsearch. Seterusnya, tanya semua mesej yang disimpan dan tolaknya kepada pengguna dalam talian.

Dalam kod yang mengendalikan mesej tolak, teknologi seperti WebSocket atau tinjauan panjang boleh digunakan untuk menolak mesej masa nyata. Kaedah pelaksanaan khusus boleh dipilih mengikut keperluan projek.

Ringkasnya, gabungan PHP dan Elasticsearch dapat merealisasikan fungsi push mesej masa nyata. Dengan menggunakan ciri berprestasi tinggi Elasticsearch, kecekapan dan prestasi tolakan boleh dipertingkatkan. Pada masa yang sama, skalabiliti PHP yang baik juga menjadikan pelaksanaan mesej masa nyata menolak lebih fleksibel dan boleh dilaksanakan. Oleh itu, ini adalah penyelesaian yang patut dipertimbangkan untuk aplikasi dan tapak web yang perlu melaksanakan push mesej masa nyata.

Atas ialah kandungan terperinci Penyelesaian tolakan mesej masa nyata yang dilaksanakan oleh PHP dan Elasticsearch. 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