我们开发了一款iPhone应用程序,并为开发和临时版本提供推送通知。但是当我们尝试向我们数据库中的真实用户设备发送推送通知时,我们得到了SSL连接重置,然后是管道错误。我们认为我们的数据库中可能有太多设备(超过70000),因此无法同时发送所有消息。所以我们尝试将消息发送到1000个设备一次,但仍然有大约100条消息的“Broken pipe”错误。我们不确定邮件是否已发送。有什么建议吗?
答案 0 :(得分:20)
我们已经解决了这个问题。它由于我们的数据库表中的无效令牌而被破坏。如果存在无效令牌,Apple apns服务将断开我们的连接。由于连接断开,当您尝试再次发送邮件时,它将出现“Broken Pipe”错误。基本解决方案是查找写入管道是否成功,如果没有,只需断开连接并在延迟一段时间后再次重新连接。
答案 1 :(得分:11)
emagic是正确的,无效令牌可能会出现“破管”错误的一个原因。它也可能出现一些其他原因。以下内容来自Apple Technical Note TN2265:
最常见的问题是设备令牌无效。如果令牌来了 来自沙盒环境,例如当你测试时 开发内置,你不能把它发送到生产推动 服务。每个推送环境都会为其发出不同的令牌 相同的设备或计算机。如果您确实发送了设备令牌错误 在环境中,推送服务会将其视为无效令牌 放弃通知。
无效的设备令牌也可能意味着用户已删除您的 来自他们的设备或计算机的应用你应该检查反馈 每天至少为不再使用的设备令牌提供服务 有效的。
其他可能的问题可能是发送超过256的有效负载 字节,您的有效负载可能没有正确格式化,或者您的 JSON字典的语法不正确。
当您的提供商闲置时,偶尔会断开连接 关心;只需重新建立连接并继续。如果一个 推送服务器关闭,负载平衡机制将 假设,将您的新连接透明地引导到另一台服务器 您通过主机名而不是静态IP地址连接。
答案 2 :(得分:2)
延伸到emagic的答案,这是我的PHP代码snipplet:
<input type="text" id="name">