向出租车司机发送推送通知,但每个循环都有延迟 - 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 通知中心注册的每个设备发送不同的推送通知?