enquire_link (0x00000015) es un keepalive ligero que confirma que una sesión SMPP enlazada sigue sana sobre TCP. El rendimiento se rige por dos límites: la ventana (cuántas PDU pueden estar sin confirmar a la vez) y el techo de TPS del proveedor. Superar la tasa devuelve ESME_RTHROTTLED (0x00000058); la solución es reducir el ritmo.
bind_transceiverAbrir y autenticar la sesiónbind_transceiver_respSesión aceptadasubmit_smEnviar un mensajesubmit_sm_respAceptado, ID de mensaje devueltodeliver_smConfirmación de entrega o mensaje entrantedeliver_sm_respConfirmadoenquire_linkKeepalive en estado de inactividad
Keepalive con enquire_link
Una sesión SMPP enlazada puede permanecer inactiva durante largos periodos, y una conexión TCP semiabierta parece viva a nivel de socket. enquire_link resuelve esto: cualquiera de los extremos lo envía con un temporizador de inactividad (normalmente cada 30–60 segundos) y espera un enquire_link_resp con prontitud. Una respuesta perdida significa que la sesión está muerta: cierra la conexión TCP y reconecta con espera. Es la única forma fiable de detectar un enlace roto de forma silenciosa.
ESME → SMSC enquire_link seq=1200
SMSC → ESME enquire_link_resp seq=1200 status=ESME_ROK
(no response within timeout ⇒ treat session as dead, reconnect)La ventana: PDU pendientes sin confirmar
SMPP es asíncrono: puedes enviar muchas PDU submit_sm antes de que llegue su submit_sm_resp. El tamaño de ventana limita cuántas pueden estar pendientes (sin confirmar) a la vez. Cuando la ventana está llena, debes pausar los envíos hasta que una respuesta libere un hueco. Disparar más allá de la ventana es una de las principales causas de limitación y PDU descartadas. El tamaño de ventana se acuerda con el proveedor: no hay un valor por defecto único del protocolo.
Limitación y TPS
Aparte de la ventana, el proveedor impone una tasa máxima de mensajes —transacciones por segundo (TPS)— por bind o por cuenta. Superarla devuelve ESME_RTHROTTLED (0x00000058). La respuesta correcta es reducir el ritmo: pausa, espera con variación aleatoria y reanuda por debajo del techo. Nunca reintentes de inmediato una PDU limitada ni abras bind adicionales para eludir el límite: ambas cosas arriesgan la suspensión de la cuenta. En la v5.0, el SMSC puede además anunciar la congestión mediante el TLV congestion_state para que los ESME reduzcan el ritmo de forma preventiva.
| Límite | Rige | Señal de superación |
|---|---|---|
| Tamaño de ventana | PDU no confirmadas en tránsito | Contrapresión / PDU descartadas |
| Techo de TPS | Mensajes por segundo | ESME_RTHROTTLED (0x58) |
| Número de binds | Sesiones paralelas | Bind rechazado / acción sobre la cuenta |
Ajuste para un rendimiento sostenido
El rendimiento real es aproximadamente el tamaño de ventana dividido por la latencia de ida y vuelta, con el tope del techo de TPS. Una ventana mayor ayuda en enlaces de alta latencia; más bind solo ayudan si el proveedor los provisiona. Instrumenta la ocupación de la ventana, la latencia de envío/respuesta y la tasa de errores de limitación, y trata un aumento de ESME_RTHROTTLED como la señal para reducir la tasa de envío en lugar de forzar más.
Preguntas frecuentes
¿Con qué frecuencia debo enviar enquire_link?
Normalmente cada 30–60 segundos con un temporizador de inactividad. Envíalo cuando la sesión haya estado en silencio y trata un enquire_link_resp ausente dentro de tu tiempo de espera como una sesión muerta que hay que reconectar.
¿Qué es el tamaño de ventana de SMPP?
La ventana es el número máximo de PDU que puedes tener pendientes (enviadas pero aún no confirmadas) a la vez. Se negocia con tu proveedor en lugar de fijarlo el protocolo; pausa los envíos cuando la ventana esté llena.
¿Cómo soluciono ESME_RTHROTTLED?
Reduce tu tasa de envío. Pausa, espera con variación aleatoria y reanuda por debajo del techo de TPS del proveedor. No reintentes de inmediato ni abras bind adicionales para eludir el límite: ambas cosas pueden hacer que te limiten con más dureza o suspendan la cuenta.
¿Una ventana mayor aumenta mi TPS?
Hasta cierto punto. El rendimiento es aproximadamente el tamaño de ventana dividido por el tiempo de ida y vuelta, pero sigue con el tope del techo de TPS del proveedor. Una ventana mayor sirve sobre todo para ocultar la latencia en enlaces de alto RTT.
¿Qué es congestion_state en SMPP v5.0?
La v5.0 añade un TLV congestion_state que permite al SMSC anunciar su nivel de carga (0–100). Un ESME cooperativo lo lee y reduce el ritmo de forma preventiva antes de alcanzar la limitación estricta, suavizando el rendimiento bajo carga.
Especificaciones de la fuente
Las normas publicadas en las que se basa esta página. Se abre en una pestaña nueva.