我知道已经有一些关于该主题的帖子,但是都无法回答我的情况。我有一台要在其上创建最快和更灵活的实现来发送推送通知的机器。基本上,问题在于,对于我的应用程序,我会在午夜向所有用户发送通知。如果说有5000万用户,那么如果我将它们排队等待,则通过TCP将所有这些通知发送给Apple最多可能需要1个小时。基本上我想:
我的第一个问题是问题(1)
是否在多个线程/进程上同时打开与Apple的多个TCP连接会更快地发送大量通知?或者,最好保持一个TCP连接并将所有这些50M通知排队在其中?当然,选择1时,一个TCP连接将同时采用某个通知窗口(例如10000),以避免完全填满内存
第二个问题是问题(2):
这种非常大的午夜发送会导致另一个问题:无论发送所有这些“午夜通知”花费什么时间,我的发送方计算机都需要从db轮询并发送在“非常大发送”期间会发生的任何新通知,并且实时传递(如果user1在12.01AM发送消息到user2,则user2需要立即接收其通知)。
为此,我认为一个好的解决方案是在数据库中设置一个优先级标志,并将任何高优先级通知放在发送队列的前面。您认为这是一个很好的解决方案吗?或者创建一个仅在具有高优先级通知的另一个TCP con的其他进程上运行的PHP脚本更好?
第三个问题是问题(3):
Apple在遇到错误时关闭TCP流。但是这个错误在发生后不久就会传给我。因此,在Apple服务器中发生错误的时间与我收到php错误“ TCP连接关闭”之间的所有时间,从我的机器通过TCP发送的所有通知最终都将无法传递。因此,系统还需要检索任何Apple错误,检测是哪个通知(i)引起了问题,然后从索引(i + 1)重新开始,以在新的TCP连接上再次发送上述通知。
第四个问题更具全局性:
您认为在数据库上进行写和轮询是一种好习惯,还是通过LAN通过TCP将来自Apache的直接消息发送到Send Notification Machine更好?使用数据库的优点:如果有说要发送50M广告推送通知,请避免RAM溢出,缺点:可能慢得多(mysql的读/写操作)?
最后,您对我可以用来实现这种复杂机制的算法(php脚本)有任何想法吗?谢谢您阅读我