php redis 实时聊天,php+redis聊天室

首先看我们的目录结构:

chat.html

sub.php

pub.php

redis.php

chat.html是访问的web页面,进行聊天室的操作

redis.php调用redis服务

sub是订阅功能

pub是发布功能

下面看代码

chat.html:

发送

$("button").click(function(){

var text = $("textarea").val();

$.post("pub.php",{"content":text});

});

function getdata(){

$.post("sub.php",function(data){

if(data){

$("div").append(data+"
");

$("textarea").val("");

getdata();

}

});

}

getdata();

redis.php:

header("content-type:text/html;charset=utf-8");

ini_set('default_socket_timeout',-1);

$redis = new Redis();

$redis -> pconnect('localhost',6379);

pub.php:

include './redis.php';

$redis -> publish('tv1',$_POST['content']);

sub.php:

include './redis.php';

$redis -> subscribe(array('tv1'),'callback');

function callback($redis,$channel,$contect){

echo $channel;

echo ":";

echo $contect;

echo "
";

exit();

}

解释下代码:

1.html中点击发送的事件,在pub.php中会将数据发布到redis中。

2.html中默认走的sub,是sub获取redis频道中的值,处于监听状态,频道中的值不发生改变,则一直处于监听状态,当值发生了改变,sub得到返回值,返回给页面,html中js将数据打到页面上,然后重新进行一波sub,继续监听。

原理:

似乎也没啥好讲的,主要是redis的发布/订阅功能,会有一个阻塞的作用,形成一个long poll可以达到类似websocket的效果,不过性能是受配合的语言(php)影响的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值