前言技术要点:restful微信开发,支付,订阅发布,rpc,即时通讯。不知道什么时候停,先继续。1.订阅和发布在高并发检测系列中已经用到了对抗消息队列。原理和发布订阅一样。实时功能需要cli在线服务,否则需要定时刷新页面。知道有redis发布订阅,rabbitmq发布订阅,swoole发布订阅,先看swoole的订阅。A。swoole发布订阅参考官方《订阅模式》,swoole订阅是基于redis的:publisherpub.php:go(function(){$redis=newSwoole\Coroutine\Redis();$redis->connect('172.1.13.11',6379);$redis->auth('123456');$channels=['channel1','channel2','channel3'];swoole_timer_tick(1000,function()use($redis,$channels){$channel=$channels[array_rand($channels)];$news=['time'=>date("Y-m-dH:i:s"),'document'=>"Thisis".date("Y-m-d",strtotime('+1天'))."新闻内容"];$redis->publish($channel,json_encode($news,JSON_UNESCAPED_UNICODE));print_r("--发布成功:".$channel.PHP_EOL);});});Subscribersub.phpgo(function(){$redis=newSwoole\Coroutine\Redis();$redis->connect('172.1.13.11',6379);$redis->auth('123456');functioncounter(){$c=1;//准备静态返回函数()use(&$c){return$c++;};}$counter=counter();//示例计数器if($redis->subscribe(['频道1','channel2','channel3'])){//或者使用psubscribewhile($msg=$redis->recv()){//msg是一个包含以下信息的数组//$type#返回的类型value:显示订阅成功//$name#订阅的频道名称或源频道名称//$info#当前订阅的频道号或信息内容列表($type,$name,$info)=$msg;if($type=='subscribe'){//orpsubscribe//频道订阅成功消息,有几个频道订阅:首先连接var_dump("频道订阅成功消息",$msg);}elseif($type=='unsubscribe'&&$info==0){//orpunsubscribebreak;//收到取消订阅消息,剩余订阅频道数为0,不再接收,结束循环}elseif($type=='message'){//如果是psubscribe,这里是pmessage$rev_times=$计数器();//标记取消订阅//打印源频道名称,消息print_r(['rev_times'=>$rev_times,'name'=>$name,'info'=>$info]);//处理消息//balabalaba....if($rev_times%10==0){//测试退订,每10个退订一个频道,可以加名字过滤$status=$redis->取消订阅($msg);//继续接收并等待取消订阅完成var_dump("readytounsubscribe$name",$status);}}}}});cli接口运行在swooleProcess的关联中运行,使用CoroutineHttpClient、CoroutineHttpServer、CoroutineHttp2Client、CoroutineRedis、CoroutineSocket、CoroutineMySQL、CoroutinePostgreSQL等二次封装类操作。b.rabbitmqpublishsubscription与其消息队列一样。2.消息队列使用场景《关于消息队列的使用》代码上传:https://github.com/cffycls/msg_que
