gpt4 book ai didi

c - 网络协议(protocol)中的定时器

转载 作者:太空狗 更新时间:2023-10-29 12:17:51 24 4
gpt4 key购买 nike

我正在 RedHat/C 中使用一种称为 SMPP 的协议(protocol)构建网络应用程序,该协议(protocol)在电信中用于发送 SMS。

我正在向服务器发送消息(~70 条短信/秒),我必须等待几秒钟才能成功响应并删除消息,但如果消息超时我必须将消息重新发送到服务器。

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

最佳答案

SMPP 规范中有一个名为 sequence_number 的 id - 对于您发出的每个请求,它应该单调递增,并且从服务器返回的响应将具有它正在响应的请求的 sequence_number。

如果您稍等片刻(可能是 10 秒,也可能更长)并且您没有收到回复,您可以使用相同的 sequence_number 重新发送请求,如果服务器确实收到了它,它应该会发现它是重复的这是第一次;如果它没有第一次收到它,那么它将把它视为一个新的请求。

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

此属性称为 http://en.wikipedia.org/wiki/Idempotence如果您正在实现电信协议(protocol),则应该熟悉这些内容。

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

正确执行 SMPP 并非易事 我建议您在深入实现之前从头到尾阅读 SMPP v3.4 规范。

关于c - 网络协议(protocol)中的定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com