热门关键字:
jquery > jquery教程 > jquery教程 > php数据实时接收数据

php数据实时接收数据

318
作者:管理员
发布时间:2021/5/31 18:35:36
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=4833
  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发布订阅来实现,丢失一点也没有关系




如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:jquery
友荐云推荐