php redis实现200w用户即时推送
如何实现对200w用户的即时推送,这个推送可以理解为调用第三方的界面、推送、短信等。
当时我写了一个演示,直接读取DB,然后单独推送。人们可以想象
所以我设计了一个基于redis+php的多进程方案,用起来还不错,但是扩展性很高,所以我分享了一下。
=============================================
具体逻辑如下:(忽略我的字体)
其实这里可以优化一下。我的假设是,如果有更多的用户数据,我们可以在redis中划分数据,采用多个Lists。每个列表对应多个php进程,这样会更快。
下面是我实现的具体代码:
主管理脚本:在申请时启动这个。
?PHP//推送配置说明:使用前请确认日志文件为空。2016-04-12 include _ once(dirname(_ _ file _ _)。'/././config . Inc . PHP ');//if(exec(' PS aux | grep redis _ push . PHP | grep-v grep | WC-l ')!=0)转到检查;import(' push . class . PHP ');import(' Redis . class . PHP ');$ time=time();$data=array('apikey'='xxxx ',' secret '=' xxxx ');$push=新渠道($ data);$ redis=new redis cache($ Credis[' host '],$ Credis[' port ']);if(exec(' PS aux | grep redis _ push . PHP | grep-v grep | WC-l ')!=0)转到检查;//如果有push任务直接执行监控代码/*PUSH配置项*/$ config=array(' file '=' test . txt ',' title'=' ssssss ',' content '=' ssssssssssss ',' opentype'=' 0 ',//1为0,是否跳转链接' Url'=',//链接地址' num'='500 ',//一次推送的文章数' s'='1' //休眠时间(单位:秒));$ num=15//启动进程数$a=$config['OpenType']==1?是' : '否';$ c=JSON _ encode($ config);$info=monkey **********请确认信息是否有误* 10秒后开始推送任务!* * * * * * * * * * *文件名: { $ config[' File ']};*推送标题: { $ config[' Title ']};*推送内容: { $ config[' Content ']};*是否跳转到: { $ config[' OpenType ']};*进程数为: $ num(如果单个进程忽略此项目)*睡眠时间: { $ config[' s ']};*日志目录:/log;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n只猴子;echo $ info睡眠(3);$ n=1;While($n=10){ echo (10-$n),' second \ n ';睡眠(1);} echo' -任务已经开始;如果($ redis-scout(' push _ getchannel _ success '){ Echo '队列有未完成的任务\ n ';} else { $ RES=exec(' PHP redis _ getchannel . PHP { $ config[' file ']} ');//编写redis脚本echo $ res} smtp_mail('[emailprotected]'、'推送任务已启动'、'请实时监控,手机5秒后会收到测试推送!');//推送监控实现定时自动推送回显' \ n - 5秒后,test将收到测试推送消息;睡眠(5);$ re=$ push-BaidPush(' xxxx ','
版权声明:php redis实现200w用户即时推送是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。