【问题标题】:APNS Push Server with multiple Apps具有多个应用程序的 APNS 推送服务器
【发布时间】:2015-01-23 09:05:17
【问题描述】:

我目前正处于计划阶段,以在我的基于 PHP 的 Web 服务中实现推送通知功能,该服务将支持多个应用程序。我当前的服务结构包括用于处理大量流量/请求负载的非持久性自动缩放服务器。

对于使用 APNS,我很难想出一个架构。 我已经阅读了APNS Getting Started

Apple 声明需要保持连接以使用 APNS 进行推送,以避免被视为 DDOS 攻击:

在多个通知中保持与 APN 的连接处于打开状态;不要反复打开和关闭连接。 APNs 将快速连接和断开连接视为拒绝服务攻击。除非您知道连接会长时间处于空闲状态,否则您应该保持连接处于打开状态,例如,如果您每天只向用户发送一次通知,则可以每天使用一个新连接。

对于大量推送,Apple 声明:

“您可以与同一个网关或多个网关实例建立多个连接。如果您需要发送大量远程通知,请将它们分散到多个不同网关的连接上。与使用单个连接相比,这可以提高性能:它可以让您更快地发送远程通知,并让 APN 更快地传递它们。”

我在网站上发现了这篇关于 Persistent APNS connections 的帖子,上面写着“...看来经验法则是最多 15 个连接

我的问题是:

1.我应该如何处理这些对多个应用程序的推送,而不会有被视为 DDOS 的风险?我不认为我可以使用我的非持久性自动缩放服务器,因为它们会在启动/关闭时连接/断开连接。我是否需要将连接分散到多个静态服务器上?

2.如果我将连接分散到多台服务器上,是否可以绕过这个 15 个连接的伪限制?如果每个应用都需要多个连接来发送大量推送通知,我觉得随着客户群的增长,我会超过 15 个。

【问题讨论】:

    标签: php ios push-notification apple-push-notifications


    【解决方案1】:

    看过一个类似的用例,TBH 似乎更容易使用Amazon SNS Mobile Push。您可以使用他们的服务维护多个平台应用程序,并且在您想要发送通知时只需 ping 一个端点。它还提供开箱即用的支持

    • 发送到其他平台(GCM/Android/Baidu Push、WNS/MPNS/Windows phone、ADM/Kindle、SMS、AWS Lambda 函数、SQS 队列生成器、HTTP/HTTPS 端点、SMS、电子邮件、MacOSX 等)
    • APNS 反馈服务的Handling 以防止 APNS 对已注销设备的垃圾邮件进行制裁 - 如果您要使用 APNS,则必须自己实施此操作
    • 主题(所有用户或用户子集的单一端点,允许您通过一次调用发送数千条通知)
    • 使用CloudWatch 进行仪表化并使用CloudTrail 进行日志记录,以跟踪您的交付率、故障等,并根据您可以定义的指标级别提供警报
    • 一个Service Mock for integration tests
    • SDKs,大多数主要语言的文档和示例

    在无限期地保持连接打开(对于每个应用程序,在多个网关上)、在流中重新发送失败的通知以及管理反馈服务 APNS 之间只是一个巨大的 PITA。另外,如果您触发他们的任何服务限制,他们将撤销您的证书或更糟,并且在您使用新系统更新系统之前,您不会发送任何通知。

    也可以让其他人为您处理所有这些麻烦 :D

    【讨论】:

    • 您建议 Amazon SNS 移动推送是 100% 正确的。它在多个平台上有很多选项和支持。由于公司限制,我无法使用此服务,因此必须自己实施所有内容。你提到的“头痛”太真实了。错误处理和恢复可能真的很痛苦,尤其是像 APNS 要求的基于套接字的传输。
    【解决方案2】:

    我自己对这个问题的解决方案是:

    -一系列拥有自己IP地址的专用服务器

    -在大容量传输期间监控和调整传出请求的速度,以避免 DDOS 中断。

    我发现的第二个问题是,特定的电话运营商会限制您可以发送给他们的推送次数,然后才会切断您的联系。因此,即使 APNS 限制是 15 个左右的连接,如果不达到特定运营商的限制并让他们的服务器将我拒之门外,我什至无法让那么多连接全速运行。不过,这可能是日本运营商特有的问题(docomo 尤其严格,我最终为他们提供了一个专用服务器,并进行了大量的传输负载调整)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2014-04-23
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多