Всё, что стоит знать, и ничего лишнего.
Зачем вообще существуют окна?
SMPP — асинхронный протокол: вы отправляете submit_sm, а SMSC отвечает submit_sm_resp, но вам не нужно ждать этого ответа, прежде чем отправлять следующий PDU. Окно определяет, на сколько сообщений вам разрешено отправлять дальше. При окне, равном 1, сессия становится запрос-ответ, и ваша пропускная способность сокращается до одного сообщения за один цикл — на канале с временем отклика 50 мс это 20 сообщений в секунду независимо от условий вашего контракта.
Арифметика
Примерная пропускная способность — это размер окна, деленный на задержку между пакетами данных. Окно размером 10 при задержке 50 мс обеспечивает примерно 200 сообщений в секунду за одно соединение; окно размером 50 — около 1000. Именно поэтому два клиента с одинаковыми коммерческими условиями могут видеть совершенно разную реальную пропускную способность — один настроил окно, а другой нет. Увеличение размера окна ничего не стоит с вашей стороны, кроме памяти для неподтвержденного PDU.
Почему нельзя просто установить значение 1000?
Окно согласовывается с оператором или провайдером, и его превышение приводит к ответам ESME_RTHROTTLED или разрыву соединения. SMSC также должен сохранять состояние для каждого неподтвержденного PDU. После определенного момента узкое место смещается с окна на собственную скорость отправки SMSC, а большее окно только углубляет очередь, которую невозможно опустошить. Согласуйте окно и потолок TPS вместе и рассматривайте их как один параметр.
Множественные привязки и упорядочивание
Когда одной привязки недостаточно, решением будет больше привязок, а не неограниченное окно — большинство провайдеров выделяют пропускную способность на каждую привязку. Будьте осторожны с порядком сообщений: PDU между отдельными привязками не гарантируют относительного порядка, поэтому многокомпонентное сообщение или последовательность, которую пользователь будет читать по порядку, должны оставаться на одной привязке. Поддерживайте работу enquire_link на каждой привязке, чтобы неактивная привязка не была незаметно отброшена.