Barisan mesej dan pemprosesan tak segerak sistem sembang masa nyata yang dibangunkan dengan PHP

WBOY
Lepaskan: 2023-08-26 18:58:01
asal
1343 orang telah melayarinya

Barisan mesej dan pemprosesan tak segerak sistem sembang masa nyata yang dibangunkan dengan PHP

PHP membangunkan baris gilir mesej dan pemprosesan tak segerak sistem sembang masa nyata

Dalam aplikasi Internet moden, sistem sembang masa nyata telah menjadi fungsi yang diperlukan. Untuk memastikan kelancaran operasi dan pengalaman pengguna sistem sembang, baris gilir mesej dan teknologi pemprosesan tak segerak telah menjadi penyelesaian pilihan untuk pembangun. Dalam artikel ini, saya akan memperkenalkan cara membangunkan sistem sembang masa nyata menggunakan PHP dan menggunakan baris gilir mesej dan pemprosesan tak segerak untuk meningkatkan prestasi.

Untuk melaksanakan sistem sembang masa nyata, kami akan menggunakan rangka kerja Laravel. Pertama, kita perlu mencipta projek Laravel dan memasang pakej pergantungan yang berkaitan. Projek ini boleh dibuat dengan arahan berikut:

composer create-project --prefer-dist laravel/laravel chat
Salin selepas log masuk

Seterusnya, kita perlu memasang Redis sebagai storan bahagian belakang untuk baris gilir mesej. Anda boleh memasang Redis melalui langkah-langkah berikut:

  1. Muat turun dan nyahzip Redis:

    wget http://download.redis.io/releases/redis-6.0.10.tar.gz
    tar xzf redis-6.0.10.tar.gz
    cd redis-6.0.10
    Salin selepas log masuk
  2. Susun dan pasang Redis:

    make
    sudo make install
    Salin selepas log masuk
  3. Jalankan Redis:

    redis-server
    Salin selepas log masuk

Susun dan pasang Redis:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesRedis;

class ChatController extends Controller
{
    public function pushMessage(Request $request)
    {
        $message = $request->input('message');

        Redis::publish('chat', json_encode([
            'message' => $message,
            'user' => $request->user()->name,
            'timestamp' => microtime(true)
        ]));

        return response()->json(['success' => true]);
    }
}
Salin selepas log masuk

Jalankan Redis:

php artisan make:listener MessageListener --queued
Salin selepas log masuk

kita boleh mula menulis kod

. Mula-mula, kita perlu mencipta pengawal bernama ChatController dan menambah kod berikut:

<?php

namespace AppListeners;

use IlluminateContractsQueueShouldQueue;
use IlluminateQueueInteractsWithQueue;
use IlluminateSupportFacadesLog;

class MessageListener implements ShouldQueue
{
    use InteractsWithQueue;

    public function handle($message)
    {
        Log::info('New message: ' . $message);
        // 处理收到的消息,例如保存到数据库或推送给相应的用户
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan kaedah pushMessage, yang menerima mesej dan menolaknya ke baris gilir mesej Redis.

app/Providers/EventServiceProvider.php 中,我们需要添加以下代码:

protected $listen = [
    'AppEventsMessageReceived' => [
        'AppListenersMessageListener',
    ],
];
Salin selepas log masuk

接下来,我们需要创建一个名为EventSubscriber的事件订阅器。可以通过以下命令来创建订阅器:

php artisan make:subscriber EventSubscriber
Salin selepas log masuk

创建后,我们需要添加以下代码来定义推送消息事件:

<?php

namespace AppSubscribers;

use AppEventsMessageReceived;
use IlluminateSupportFacadesEvent;

class EventSubscriber
{
    public function handle(MessageReceived $event)
    {
        Event::fire('AppEventsMessageReceived', [$event->message]);
    }

    public function subscribe($events)
    {
        $events->listen(
            'AppEventsMessageReceived',
            'AppListenersMessageListener@handle'
        );
    }
}
Salin selepas log masuk

在上述代码中,我们定义了handle方法和subscribe方法来处理推送消息事件。

最后,我们需要将事件订阅器注册到Laravel中。在 app/Providers/EventServiceProvider.phpSeterusnya, kita perlu mencipta pendengar baris gilir yang dipanggil MessageListener. Pendengar boleh dibuat dengan arahan berikut:

protected $subscribe = [
    'AppSubscribersEventSubscriber',
];
Salin selepas log masuk

Selepas penciptaan, kita perlu mengubah suai kod berikut untuk mengaitkan pendengar dengan baris gilir mesej Redis:

$.ajax({
    url: '/push-message',
    type: 'POST',
    data: { message: 'Hello world' },
    success: function(response) {
        console.log(response);
    }
});
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan kaedah pengendalian untuk mengendalikan yang diterima maklumat. Dalam kaedah ini, anda boleh melakukan pemprosesan logik perniagaan yang sepadan mengikut keperluan.

🎜Akhir sekali, kita perlu mendaftarkan pendengar. Dalam app/Providers/EventServiceProvider.php kita perlu menambah kod berikut: 🎜rrreee🎜Seterusnya, kita perlu mencipta pelanggan acara yang dipanggil EventSubscriber. Pelanggan boleh dibuat melalui arahan berikut: 🎜rrreee🎜Selepas penciptaan, kita perlu menambah kod berikut untuk mentakrifkan peristiwa mesej push: 🎜rrreee🎜Dalam kod di atas, kami mentakrifkan kaedah pemegang dan kaedah langganan untuk mengendalikan acara mesej push. 🎜🎜Akhir sekali, kami perlu mendaftarkan pelanggan acara ke dalam Laravel. Dalam app/Providers/EventServiceProvider.php, kami perlu mengubah suai kod berikut: 🎜rrreee🎜Selepas melengkapkan langkah di atas, kami boleh menolak mesej ke pelayan melalui Ajax dalam kod bahagian hadapan. Berikut ialah contoh mudah: 🎜rrreee🎜Dengan menggunakan baris gilir mesej dan teknologi pemprosesan tak segerak, kami boleh meningkatkan prestasi dan pengalaman pengguna sistem sembang masa nyata dengan sangat baik. Semoga artikel ini dapat membantu anda lebih memahami dan mengaplikasikan teknik ini. 🎜

Atas ialah kandungan terperinci Barisan mesej dan pemprosesan tak segerak sistem sembang masa nyata yang dibangunkan dengan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan