Todo lo que vale la pena saber, nada que no lo sea.
¿Por qué existe una ventana?
SMPP es asíncrono: se envía un submit_sm y el SMSC responde con un submit_sm_resp, pero no es necesario esperar esa respuesta antes de enviar la siguiente PDU. La ventana determina cuántos mensajes se pueden enviar por adelantado. Con una ventana de 1, la sesión se convierte en solicitud-respuesta y el rendimiento se reduce a un mensaje por viaje de ida y vuelta; en un enlace de 50 ms, esto equivale a 20 mensajes por segundo, independientemente de lo que estipule el contrato.
La aritmética
El rendimiento aproximado se calcula dividiendo el tamaño de la ventana entre la latencia de ida y vuelta. Una ventana de 10 con una latencia de ida y vuelta de 50 ms proporciona aproximadamente 200 mensajes por segundo en una conexión; una ventana de 50 proporciona alrededor de 1000. Por eso, dos clientes con condiciones comerciales idénticas pueden experimentar rendimientos reales muy diferentes: uno ha ajustado la ventana y el otro no. Aumentar la ventana no supone ningún coste para el usuario, salvo el consumo de memoria para la PDU no confirmada.
¿Por qué no puedes simplemente configurarlo a 1000?
La ventana se acuerda con el operador o proveedor, y si se excede, se generan respuestas ESME_RTHROTTLED o se pierde la conexión. El SMSC también debe mantener el estado de cada PDU no confirmada. A partir de cierto punto, el cuello de botella pasa de la ventana a la tasa de envío del propio SMSC, y una ventana más grande solo agrava una cola que no se puede vaciar. Acuerde la ventana y el límite TPS conjuntamente y trátelos como una sola configuración.
Múltiples binds y ordenación
Cuando una sola vinculación no es suficiente, la solución es usar más vinculaciones en lugar de una ventana ilimitada; la mayoría de los proveedores asignan ancho de banda por vinculación. Tenga cuidado con el orden de los mensajes: PDU en diferentes vinculaciones no tienen un orden relativo garantizado, por lo que un mensaje de varias partes o una secuencia que el usuario leerá en orden debe permanecer en una sola vinculación. Mantenga un enquire_link activo en cada una para que una vinculación inactiva no se cierre silenciosamente.