Tutto ciò che vale la pena sapere, niente di superfluo.
Perché esiste una finestra?
SMPP è asincrono: si invia un submit_sm e l' SMSC risponde con un submit_sm_resp, ma non è necessario attendere tale risposta prima di inviare la PDU successiva. La finestra indica quanti messaggi è consentito inviare in anticipo. Con una finestra di 1, la sessione diventa richiesta-risposta e la velocità di trasmissione si riduce a un messaggio per round trip: su un collegamento a 50 ms, ciò corrisponde a 20 messaggi al secondo, indipendentemente da quanto stabilito dal contratto.
L'aritmetica
La velocità di trasmissione approssimativa si calcola dividendo la dimensione della finestra per la latenza di andata e ritorno. Una finestra di 10 con una latenza di andata e ritorno di 50 ms genera circa 200 messaggi al secondo per ogni connessione; una finestra di 50 ne genera circa 1.000. Questo spiega perché due clienti con le stesse condizioni commerciali possono riscontrare velocità di trasmissione reali molto diverse: uno ha ottimizzato la finestra e l'altro no. Aumentare la dimensione della finestra non comporta alcun costo aggiuntivo per il cliente, a parte il consumo di memoria per la PDU non riconosciuta.
Perché non puoi semplicemente impostarlo a 1.000
La finestra temporale viene concordata con l'operatore o il fornitore e il suo superamento comporta risposte ESME_RTHROTTLED o la perdita della connessione. L' SMSC deve inoltre mantenere lo stato per ogni PDU non confermata. Oltre un certo limite, il collo di bottiglia si sposta dalla finestra temporale alla frequenza di invio SMSC stesso, e una finestra temporale più ampia non fa altro che aumentare una coda che non è possibile svuotare. Concordate insieme la finestra temporale e il limite massimo TPS al secondo) e trattateli come un'unica impostazione.
Legami multipli e ordinamento
Quando un solo bind non è sufficiente, la soluzione è utilizzare più bind anziché una finestra illimitata: la maggior parte dei provider alloca la velocità di trasmissione per ogni bind. Prestare attenzione all'ordine dei messaggi: PDU su bind separati non hanno un ordine relativo garantito, quindi un messaggio in più parti o una sequenza che un utente leggerà in ordine dovrebbe rimanere su un unico bind. Mantenere attivo un enquire_link su ciascun bind in modo che un bind inattivo non venga eliminato silenziosamente.