9

我有一个项目即将推出,我需要通过特定的移动运营商发送和接收消息,该运营商只提供一个 SMPP 接口。整个项目将是一个托管网站。我已经阅读了很多内容,但我还不太了解我这边实际需要什么来使用该协议。

我的应用程序是否应该尝试保持与 smpp 的持续连接?我可以简单地连接、发送消息然后断开连接吗?

接收消息是基于推送还是拉取?

谢谢您的帮助。

4

2 回答 2

8

SMPP 是一种对等协议。这应该意味着 SMS Gateway(您的一方)和 SMSC(您的移动运营商)需要建立正确的绑定/连接。即使没有要发送/接收的 SMS 或 DLR,也会持续交换 smpp PDU (enquire_link/enquire-link_resp),以确保建立绑定。详细地说,如果您发送 enquire_link PDU 并且没有收到响应 (enquire_link_resp),则绑定被破坏。您的短信将不会送达(将在您的网关存储中保持排队),并且您不会收到 MO(传入短信)或 DLR(送达报告)。要重新建立连接,您应该重新启动连接。

因此,我的回答是您需要与 SMSC 保持持续连接。

于 2013-06-30T11:21:17.020 回答
4

您说您想接收消息,因此至少bind_receiver需要 a 。因为您不知道什么时候会收到消息,所以您必须不断地保持联系,而不是在每次事件后断开连接。

关于您关于“推或拉”的问题,这取决于您如何解决第一个问题。如果你可以构建一个持续连接的解决方案,结果将是一个推送(运营商一收到消息就会推送给你)。如果(由于某种原因)你不能保持一个持续的连接,你最终会建立一个拉机制。您将每隔 X 秒连接到运营商,以查看他们是否有消息等着您。

我确实需要强调两个陷阱:

  1. 如果您未连接,世界上的许多运营商都不会存储甚至接受消息,因此,根据您与之交互的运营商,您可能会被迫使用持续连接。
  2. 大多数运营商不允许您快速连续打开和关闭连接。一旦断开连接,您将在 X 秒的时间范围内无法重新连接。

因此,持续的连接确实是要走的路。或者,您可以查看像 Nexmo 这样的公司,它会在每次消息到达时为您提供 HTTP 调用。

我不确定您使用哪种语言开发您的应用程序,但如果您使用任何流行的语言(Java、PHP、Perl),那里的模块可以为您处理基本的 SMPP 连接。快速谷歌搜索您的语言和“SMPP 客户端”将为您提供参考列表。

于 2011-06-03T17:32:58.890 回答