Tous les articles

Anatomie d'une réservation de taxi en temps réel

Temps réel · 2 min de lecture ·

J'ai construit le backend d'un système de réservation de taxis à Toronto, et la chose la plus utile que je puisse vous donner n'est pas du code. C'est le schéma que je redessinais à chaque appel avec l'équipe :

Passager Chauffeur Serveur de répartition 1 · «réserver un taxi» 2 · «nouvelle course !» signal GPS toutes les 2 s 3 · position de la voiture, en direct 4 · appel vocal WebRTC : de téléphone à téléphone, ne touche jamais le serveur les flèches 1 à 3 circulent chacune sur une connexion WebSocket ; ouvrir une nouvelle requête HTTP à chaque signal aurait fait fondre le serveur
Tout le système sur un coin de table : deux téléphones, un serveur au milieu, et un appel vocal qui le contourne entièrement.

Les trois décisions qui comptent

WebSockets, pas de polling. Un chauffeur envoie sa position toutes les 2 secondes. En HTTP, c'est une nouvelle connexion, des en-têtes et une authentification à chaque signal. Sur un seul WebSocket, c'est une trame de 30 octets. Avec 200 chauffeurs connectés, ça change tout.

Le serveur ne fait que le matching, rien d'autre. La répartition décide quel chauffeur reçoit la course et relaie les positions. Elle ne porte pas l'appel vocal.

La voix passe de pair à pair. WebRTC a besoin du serveur une seule fois, pour la poignée de main (des messages du même type que les flèches 1 et 2, pour échanger les adresses réseau). Ensuite, l'audio circule de téléphone à téléphone. Coût réseau nul de votre côté, latence plus basse pour eux.

Tout ce qui est temps réel dans ce système est une diffusion de petits faits : "chauffeur déplacé", "course acceptée", "voiture arrivée". Si vous le modélisez comme des événements et gardez chaque événement minuscule, l'architecture reste simple, et le simple est ce qu'on veut à 2 h du matin quand un taxi se perd.

La pile pour les curieux : Laravel pour l'API et le matching, WebSockets pour le canal en direct, WebRTC pour les appels, et une file d'attente (voir le premier article) pour les reçus et les notifications.

Ce que disent les lecteurs

  1. Pas encore de mot. Le premier est toujours le plus courageux.
Vous construisez quelque chose du genre ? Je peux vous aider. Contact