尝试进行推送通知时获取SSL Broken pipe错误

时间:2010-04-12 23:11:49

标签: iphone apple-push-notifications

我们开发了一款iPhone应用程序,并为开发和临时版本提供推送通知。但是当我们尝试向我们数据库中的真实用户设备发送推送通知时,我们得到了SSL连接重置,然后是管道错误。我们认为我们的数据库中可能有太多设备(超过70000),因此无法同时发送所有消息。所以我们尝试将消息发送到1000个设备一次,但仍然有大约100条消息的“Broken pipe”错误。我们不确定邮件是否已发送。有什么建议吗?

3 个答案:

答案 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">