enquire_link (0x00000015) — это лёгкий keepalive, подтверждающий, что связанная сессия SMPP по-прежнему исправна поверх TCP. Пропускная способность определяется двумя ограничениями: окном (сколько PDU может оставаться неподтверждёнными одновременно) и потолком TPS провайдера. Превышение скорости возвращает ESME_RTHROTTLED (0x00000058); решение — выдержать паузу.
bind_transceiverОткрыть и аутентифицировать сессиюbind_transceiver_respСессия принятаsubmit_smОтправить сообщениеsubmit_sm_respПринято, возвращен ID сообщенияdeliver_smПодтверждение доставки или входящее сообщениеdeliver_sm_respПодтвержденоenquire_linkKeepalive в режиме ожидания
Keepalive enquire_link
Связанная сессия SMPP может простаивать долгие периоды, а полуоткрытое TCP-соединение выглядит живым на уровне сокета. enquire_link решает это: любая из сторон отправляет его по таймеру простоя (обычно каждые 30–60 секунд) и ожидает быстрый enquire_link_resp. Пропущенный ответ означает, что сессия мертва — разорвите TCP-соединение и переподключитесь с выдержкой. Это единственный надёжный способ обнаружить молча оборванный канал.
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)Окно: неподтверждённые PDU в полёте
SMPP асинхронен: вы можете отправить множество PDU submit_sm до прихода их submit_sm_resp. Размер окна ограничивает, сколько их может оставаться неподтверждёнными одновременно. Когда окно заполнено, нужно приостановить отправку, пока ответ не освободит место. Отправка сверх окна — одна из главных причин троттлинга и потери PDU. Размер окна согласуется с провайдером — единого протокольного значения по умолчанию нет.
Троттлинг и TPS
Отдельно от окна провайдер накладывает максимальную скорость сообщений — транзакций в секунду (TPS) — на каждый bind или на учётную запись. Её превышение возвращает ESME_RTHROTTLED (0x00000058). Правильная реакция — замедлиться: приостановить, выдержать паузу с джиттером и возобновить ниже потолка. Никогда не повторяйте PDU с троттлингом немедленно и не открывайте дополнительные bind в обход лимита — и то и другое грозит блокировкой учётной записи. В v5.0 SMSC может дополнительно сообщать о перегрузке через TLV congestion_state, чтобы ESME могли упреждающе замедлиться.
| Лимит | Регулирует | Сигнал превышения |
|---|---|---|
| Размер окна | Неподтверждённые PDU в пути | Обратное давление (backpressure) / отброшенные PDU |
| Порог TPS | Сообщений в секунду | ESME_RTHROTTLED (0x58) |
| Количество bind-сессий | Параллельные сессии | Bind отклонён / действие с учётной записью |
Настройка для устойчивой пропускной способности
Реальная пропускная способность примерно равна размеру окна, делённому на задержку кругового обхода, и ограничена сверху потолком TPS. Большее окно помогает на каналах с высокой задержкой; больше bind помогают только если провайдер их выделяет. Отслеживайте заполнение окна, задержку отправки/ответа и долю ошибок троттлинга и воспринимайте рост доли ESME_RTHROTTLED как сигнал снизить скорость отправки, а не наращивать её.
Часто задаваемые вопросы
Как часто отправлять enquire_link?
Обычно каждые 30–60 секунд по таймеру простоя. Отправляйте его, когда сессия была тихой, и считайте отсутствие enquire_link_resp в пределах вашего тайм-аута признаком мёртвой сессии, требующей переподключения.
Что такое размер окна в SMPP?
Окно — это максимальное число PDU, которые могут оставаться незавершёнными (отправленными, но ещё не подтверждёнными) одновременно. Оно согласуется с провайдером, а не фиксируется протоколом; приостанавливайте отправку, когда окно заполнено.
Как исправить ESME_RTHROTTLED?
Снизьте скорость отправки. Приостановите, выдержите паузу с джиттером и возобновите ниже потолка TPS провайдера. Не повторяйте немедленно и не открывайте дополнительные bind в обход лимита — и то и другое может привести к более жёсткому троттлингу или блокировке учётной записи.
Увеличивает ли большее окно мой TPS?
До определённого предела. Пропускная способность примерно равна размеру окна, делённому на время кругового обхода, но она всё равно ограничена потолком TPS провайдера. Большее окно в основном помогает скрыть задержку на каналах с высоким RTT.
Что такое congestion_state в SMPP v5.0?
v5.0 добавляет TLV congestion_state, позволяющий SMSC сообщать степень своей загрузки (0–100). Кооперативный ESME читает его и упреждающе замедляется, не доводя до жёсткого троттлинга, сглаживая пропускную способность под нагрузкой.
Технические характеристики источника
На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)