Todos los artículos

Anatomía de una reserva de taxi en tiempo real

Tiempo real · 2 min de lectura ·

Construí el backend de un sistema de despacho de taxis en Toronto, y lo más útil que puedo darte no es código. Es el dibujo que hacía una y otra vez en cada llamada con el equipo:

Pasajero Conductor Servidor de despacho 1 · «reservar un taxi» 2 · «¡nuevo viaje!» señal GPS cada 2 s 3 · posición del coche, en vivo 4 · llamada de voz WebRTC: de teléfono a teléfono, nunca toca el servidor las flechas 1 a 3 viajan cada una por una conexión WebSocket; abrir una nueva petición HTTP por cada señal habría derretido el servidor
Todo el sistema en una servilleta: dos teléfonos, un servidor en el medio, y una llamada de voz que lo evita por completo.

Las tres decisiones que importan

WebSockets, no polling. Un conductor envía su ubicación cada 2 segundos. Por HTTP eso es una conexión nueva, cabeceras y autenticación en cada señal. Por un solo WebSocket es un frame de 30 bytes. Con 200 conductores conectados, esa es toda la diferencia.

El servidor solo se encarga del emparejamiento, nada más. El despacho decide qué conductor recibe el viaje y retransmite las posiciones. No lleva la llamada de voz.

La voz va de igual a igual. WebRTC necesita el servidor una sola vez, para el handshake (mensajes como las flechas 1 y 2, para intercambiar direcciones de red). Después, el audio fluye de teléfono a teléfono. Costo de ancho de banda cero de tu lado, menor latencia para ellos.

Todo lo que es en tiempo real en este sistema es un reparto de hechos pequeños: "conductor se movió", "viaje aceptado", "coche llegó". Si lo modelas como eventos y mantienes cada evento diminuto, la arquitectura se mantiene simple, y simple es lo que quieres a las 2 de la madrugada cuando se pierde un taxi.

La pila para los curiosos: Laravel para la API y el emparejamiento, WebSockets para el canal en vivo, WebRTC para las llamadas, y una cola (ver el primer artículo) para recibos y notificaciones.

Notas de los lectores

  1. Todavía no hay notas. La primera siempre es la más valiente.
¿Estás construyendo algo parecido? Puedo ayudarte. Contacto