本篇内容主要讲解“php怎么实现实时接收数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php怎么实现实时接收数据”吧!
1.发布订阅的Pub/Sub
发布订阅(Pub/Sub):目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者------是不是与设计模式里面的观察者模式一个妈妈生的?
Redis的Pub/Sub非常非常简单,运行稳定并且快速。支持模式匹配,能够实时订阅与取消频道。比如很多用Pub/Sub构建的实时聊天系统、聊天群发的例子。
Redis 客户端可以订阅任意数量的频道。
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。
发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。
2.发布订阅的使用场景
最经典的应用场景就是微博和公众号,任何粉丝只要关注(订阅)了某一个人的微博或者公众号,该微博或者公众号只有有状态更新,都会将消息推送(发布)到粉丝。
发布订阅的执行过程是由我们的发布者跟我们的频道去建立关系,然后把这个消息通过长连接方式发送过去。同时这个时候我们还有一个订阅者,我们也需要去订阅我们的内容,如果说我们订阅了,那么当我们的频道收到了某个消息的时候,我们会及时的去给订阅者做到消息的推送。
那么这里的连接就会涉及到我们的长连接和短连接,他们之间有什么区别呢?
3.PHP实现实时发布订阅
subscribe(消息订阅端 sub.php):在终端执行sub.php命令,就会处在监听状态,等待发布者发布消息进行处理。
$redis=new Redis();
$res=$redis->pconnect('127.0.0.1', 6379,0);
$redis->subscribe(array('luke'), 'callback');
// 回调函数,这里写处理逻辑
function callback($instance, $channelName, $message) {
echo $channelName, "==>", $message,PHP_EOL;
}
publish(消息发布端 pub.php):
$redis=new Redis();
// 第一个参数为redis服务器的ip,第二个为端口
$res=$redis->connect('127.0.0.1', 6379);
// luke为发布的频道名称,hello,world为发布的消息
$res=$redis->publish('luke','hello,world');
4.redis可以实现发布订阅和消息队列的功能,两者的区别在于:
1)redis的订阅者可以是多个,且可以同时处理发布上来的消息,如果订阅者不在线(服务没有启动)消息将丢失,消息没有持久化。发布和订阅是一块执行的,缺少一个直接忽略这个消息
2)消息队列只能有一个客户端来处理,处理完之后消息就被标记或删除,即使服务端没有启动消息也不会丢失
3)两者的使用场景要根据业务数据的准确度,敏感性决定,比如日志就可以用redis发布订阅来实现,丢失一点也没有关系
到此,相信大家对“php怎么实现实时接收数据”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。