2013-12-09 58 views
2

我正在RedHat/C中使用一种名为SMPP的协议构建网络应用程序,该协议正被用于电信发送短信。网络协议中的计时器

我正在发送消息(〜70 SMS /秒)到服务器,我必须等待几秒钟,并成功响应并删除消息,但如果消息超时那么我必须重新发送消息到服务器。

问题是如何设计一些东西来重试过期的消息?

+0

70!你是垃圾邮件的服务器? –

+0

否:),这是我可以发送的最大短信数量。我们使用此服务向用户发送电话每月帐单已准备就绪。 –

回答

2

SMPP规范中有一个名为sequence_number的标识 - 对于每个请求,这应该是单调递增的,并且从服务器返回的响应将具有其响应的请求的sequence_number。

如果您等待了一段时间(可能是10秒,也许更长),并且您没有收到回复,则可以使用相同的sequence_number重新发送请求,并且服务器应该将其发现为重复的第一次接收它;如果它第一次没有收到它,那么它将把它作为一个新的请求。

服务器也可能向客户端发出请求;例如这里是一个送货单或这里是一个移动发起的消息 - 它也会有它自己的sequence_number计数器,你应该确认它的请求的响应具有相同的序列号。你应该跟踪你看到的序列号,这样你可以判断你是否有重复的请求。

此属性被称为http://en.wikipedia.org/wiki/Idempotence,如果您正在实施电信协议,则应该熟悉这一点。

为了获得70 msgs/sec,您可能需要使用滑动窗口http://en.wikipedia.org/wiki/Flow_control_(data)#Sliding_Window构建在Idempotence之上,因此您最多可以有N个(可能为10个)未完成请求,但您仍在等待响应确认除非您非常接近SMPP服务器,且延迟非常低。

做SMPP的权利不是微不足道的我会建议你阅读SMPP v3.4规范前面,然后你太过于执行。

0

这是不是很清楚你要求什么,所以答案也可能不是很精确。

我会建议看看这是如何在一些现有的解决方案中实现的。我曾与kannel和mbuni(这是MMS的),我建议看一看kannel特别。

Kannel基本上是开源的SMS网关,并且有工作SMPP支持。

再看看this stackoverflow线程,这也可能有助于理解一些想法。

+0

抱歉,所以问题是如何设计一些东西来重试过期的消息 –