我正在使用PHP连接到apn
以向多个设备发送一些通知,尽管问题更具概念性,因此它不必特定于PHP。
我将同时发送大约7000个设备(并且正在增长)。 我的进程每天运行ONCE并广播到所有设备,因此我不会经常重新打开连接。
目前,我可以轻松地一次发送到2台设备,这些消息将成功传送。 但是,当我尝试发送到完整的7000个设备时,消息似乎无法传送。
我的代码的伪逻辑是:
open connection to apple
loop over device-tokens
write to socket connection per device
end loop
close connection to apple.
我已经看到某个地方我只应该执行一个单一的写入,并构造一个巨大的主体,换句话说,伪代码看起来像:
loop over device tokens
create payload aggregating all devices
end loop
open connection to apple
write to socket ONCE with whole payload for 7000 devices
close connection
很难测试,因为我显然无法通过测试消息向我的7000个生产用户发送垃圾邮件。 还有其他人有类似的问题吗?
由于
答案 0 :(得分:6)
我读过苹果确实关心你对服务器的连接的数量,但我从来没有听说过任何写入限制。另外,我不确定你会在这里收到什么样的回复,但是值得一试看看会发生什么。也许使用沙箱推送通知服务器,只使用生产设备的设备令牌。这些手机不应该收到发送到沙箱服务器的任何推送通知,如果沙箱报告“已成功发送”,那么这将是一种无忧的测试方式。
答案 1 :(得分:0)
我看到了你想要的东西,而且我确实遇到了同样的问题,对我有用的是逆向工程。 我只是查看了库并检查了验证deviceToken的函数。因此,在创建虚拟设备令牌时,我只是确保生成的令牌按库有效。
以下代码可让您生成有效设备令牌,现在可以使用此功能生成数百万个令牌。
def generateRandomDeviceTokenAndAppendItToJson(tokenLength: Int) {
val randomlyGeneratedDeviceToken = new StringBuilder()
randomlyGeneratedDeviceToken.append(" \"")
(1 to tokenLength) foreach {
times: Int =>
if (tokenLength equals Device.Apple)
randomlyGeneratedDeviceToken.append(validCharacter().toString.charAt(0))
else
randomlyGeneratedDeviceToken.append(Random.alphanumeric.head)
}
randomlyGeneratedDeviceToken.append("\",")
println(randomlyGeneratedDeviceToken)
writer.write(randomlyGeneratedDeviceToken.toString())
}
private def validCharacter(): Int = {
val a = Random.alphanumeric.head
if ('0' <= a && a <= '9')
return (a - '0')
else if ('a' <= a && a <= 'f')
return ((a - 'a') + 10)
else if ('A' <= a && a <= 'F')
return ((a - 'A') + 10)
validCharacter()
}
apple deviceToken是64个字符,所以你需要迭代它64次。