向出租车司机发送推送通知,但每个循环都有延迟 - php laravel

Posted

技术标签:

【中文标题】向出租车司机发送推送通知,但每个循环都有延迟 - php laravel【英文标题】:Send push notifications to Taxi drivers but with a delay in a for each loop - php laravel 【发布时间】:2021-09-28 09:06:05 【问题描述】:

所以这是一个内置在 php Laravel 中的简单出租车调度服务器,它使用 foreach 循环向客户半径内匹配的在线出租车司机发送推送通知:

foreach ($Providers_active as $key => $Provider) 

  (new SendPushNotification)->IncomingRequest($Provider->id); 


我使用以下方法获取客户范围内的所有在线驱动程序:

        $Providers_active = Provider::with('service')
            ->select(DB::Raw("(6371 * acos( cos( radians('$latitude') ) * cos( radians(latitude) ) * cos( radians(longitude) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians(latitude) ) ) ) AS distance"),'id')
            ->where('status', 'online')
            ->orderBy('distance','asc')
            ->get();

我的 IncomingRequest 函数如下所示:

public function IncomingRequest($provider)

        $provider = Provider::where('id',$provider)->with('profile')->first();
        return $this->sendPushToProvider($provider->id, "New Ride Request");

    

但由于此代码实际上是在一毫秒内执行的,因此所有匹配的驱动程序都会同时正确地获得推送通知。但我正在尝试将推送通知一一发送给他们,延迟可能是几秒钟。

请注意:

    我通过比较时间延迟尝试在其中使用 while 循环。 我也在考虑使用 sleep() 方法。

但我很确定那些不是最好的方法。

【问题讨论】:

你在使用 Laravel 内置的 Notification laravel.com/docs/8.x/notifications 和 Event system laravel.com/docs/8.x/events 【参考方案1】:

我会将这些放入作业队列中。您可以限制作业处理的频率。因此,如果您想每 10 秒发送一个通知,您可以这样做。

https://laravel.com/docs/8.x/queues#rate-limiting

这是他们在文档中的一些示例代码。这显示perHour(),但也有perMinute(),所以如果你使用perMinute(6),应该每10秒发送一个。

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()

    RateLimiter::for('backups', function ($job) 
        return $job->user->vipCustomer()
                    ? Limit::none()
                    : Limit::perHour(1)->by($job->user->id);
    );

【讨论】:

以上是关于向出租车司机发送推送通知,但每个循环都有延迟 - php laravel的主要内容,如果未能解决你的问题,请参考以下文章

如何向 Azure 通知中心注册的每个设备发送不同的推送通知?

有没有办法只向锁定屏幕发送推送通知?

我们可以使用 Firebase 向独立用户发送自定义推送通知吗?

如何从通知中心 Swift 中删除特定的推送通知

一次向多个设备推送通知

如何在不使用php循环的情况下同时向ios设备发送1000条推送通知