2013-12-09 6 views
2

Я создаю сетевое приложение в RedHat/C с протоколом SMPP, который используется в телекоммуникации для отправки SMS.Таймеры в сетевых протоколах

Я нахожусь в точке, где я отправляю сообщения (~ 70 SMS/секунду) на сервер, и я должен ждать до нескольких секунд и для успешного ответа и удаления сообщений, но если время ожидания сообщения то я должен отправить сообщение на сервер.

Вопрос в том, как создать что-то, чтобы повторить истекшие сообщения?

+0

70! Вы рассылаете спам на сервере? –

+0

нет :), это максимальное количество SMS, которое я могу отправить. мы используем эту услугу для отправки подписчикам, что их ежемесячный счет за телефон готов. –

ответ

2

В спецификаторе SMPP указан номер sequence_number - это должно быть монотонно увеличиваться для каждого запрошенного вами запроса, а ответ, возвращаемый с сервера, будет иметь порядковый номер запроса, на который он отвечает.

Если вы подождете немного (возможно, 10 секунд, может быть, больше), и вы не получите ответ, вы можете повторно отправить запрос с тем же номером последовательности, и сервер должен определить его как дубликат, если он получить его в первый раз; если он не получил его в первый раз, тогда он будет рассматривать его как новый запрос.

Сервер также может отправлять запросы вашему клиенту; например вот квитанция о доставке или вот сообщение с мобильным источником - у него также будет свой собственный счетчик sequence_number, и вы должны признать его запросы с ответами, имеющими один и тот же порядковый номер. Вы должны отслеживать порядковые номера, которые вы видели, чтобы вы могли определить, попали ли вы в дубликат запроса.

Это свойство называется http://en.wikipedia.org/wiki/Idempotence, и вам следует ознакомиться с тем, реализуете ли вы протоколы телекоммуникаций.

Чтобы получить ваши 70 msgs/sec, вам, скорее всего, нужно будет построить поверх Idempotence с помощью скользящего окна http://en.wikipedia.org/wiki/Flow_control_(data)#Sliding_Window, чтобы вы могли иметь максимум N (возможно, 10) запросов, выдающихся, вы все еще ожидаете подтверждения ответа до - если вы не очень близки к серверу SMPP с очень низкой задержкой.

Выполнение прав SMPP не является тривиальным Я бы порекомендовал вам прочитать SMPP v3.4 spec спереди назад, прежде чем вы заходите слишком далеко в реализацию.

0

Не совсем понятно, о чем вы просите, поэтому ответ также будет, вероятно, не очень точным.

Я бы предложил посмотреть, как это реализовано в некоторых существующих решениях. Я немного поработал с kannel и mbuni (это скорее для MMS), и я предлагаю особенно взглянуть на kannel.

Kannel - это SMS-шлюз с открытым исходным кодом и поддержка SMPP.

Взгляните также на статью this stackoverflow, которая также поможет понять некоторые идеи.

+0

жаль, что вопрос заключается в том, как создать что-то, чтобы повторить истекшие сообщения –

Смежные вопросы