Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

447
Vistas
Envíe notificaciones automáticas a los taxistas pero con un retraso en cada ciclo - php laravel

Entonces, este es un servidor de despacho de taxis simple integrado en php Laravel que envía notificaciones automáticas a los taxistas en línea coincidentes dentro del radio del Cliente, utilizando un bucle foreach:

 foreach ($Providers_active as $key => $Provider) { (new SendPushNotification)->IncomingRequest($Provider->id); }

Obtengo todos los Controladores en línea en el radio del Cliente usando esto:

 $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();

y mi función IncomingRequest se ve así:

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

Pero dado que este código se ejecuta literalmente en una milésima de segundo, todos los controladores coincidentes reciben la notificación automática al mismo tiempo. Pero estoy tratando de enviarles las notificaciones automáticas una por una con un retraso de quizás un par de segundos.

Tenga en cuenta:

  1. Intenté usar un bucle while dentro de él comparando el retraso de tiempo.
  2. También estoy considerando usar el método sleep().

Pero estoy bastante seguro de que esas no son las mejores maneras de hacerlo.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los pondría en una cola de trabajos. Puede limitar la frecuencia con la que se procesa un trabajo. Entonces, si desea enviar una notificación cada 10 segundos, puede hacerlo.

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

Aquí hay un código de ejemplo que tienen en los documentos. Esto muestra perHour() pero también hay perMinute() , por lo que si usó perMinute(6) debería enviar uno cada 10 segundos.

 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); }); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda