var rtmsg = {
//请求地址
uri: U("public/RtMsg/rtmsg"),
//要获取的消息,可以根据需要动态增减,如从模板变量进行分配,这样可以减少不必要的数据浪费宽带
items:'UnreadCount,Allnet,newfeed',
//建立连接
connect: function () {
$.ajax({
url: rtmsg.uri,
data:{'items':rtmsg.items},
type: 'post',
dataType: 'json',
success: function (res) {
//请求成功后通过HadnleRes对返回的结果进行分配处理
rtmsg.HandleRes(res.data);
}
})
},
//将取回的结果分配给对应的处理程序
HandleRes: function (res) {
for (x in res) {
eva l('rtmsg.Handle' + x + '(res[x])');
}
},
//处理未读消息数提醒
HandleUnreadCount: function (res) {
/*…………*/
},
//处理全网喊话
HandleAllnet: function (allnet) {
/*…………*/
},
//最新说说处理
HandleNewfeed: function (newfeed) {
/*…………*/
}
/*我还想要*/
/*我还可以再加*/
};
$(function () {
//每隔10秒再来一次
setInterval(rtmsg.connect, 10000);
//页面加载完毕先来一次
rtmsg.connect();
})
< php
/**
* 实时消息推送模块
*/
class RtMsgAction extends Action
{
/**
* 模块初始化
*/
function _initialize()
{
//关闭session,连接占用session导至页面等待
session_write_close();
//不限请求超时
set_time_limit(0);
}
public function rtmsg()
{
//接收要获取的消息项
$items = $_REQUEST['items'];
//收集消息
$rt = $this->collect(explode(',', $items));
//返回的消息格式大至如下
$rt = array(
'UnreadCount'=>array('status'=>1,'data'=>array('total'=>5,'system'=>2,'message'=>3)),
'Allnet'=>array('status'=>1,'data'=>array('消息一','消息二','消息三','data格式自定,方便客户端处理为好'),
'Newfeed'=>array('status'=>0,'data'=>false)
)
//返回json格式消息
echo json_encode($rt);
}
/**
* 收集需要返回给客户端的信息
*/
public function collect($items)
{
//设置未传items时默认获取哪些消息
$items = $items $items:array('UnreadCount', 'Allnet', 'Newfeed');
$rt = array();
//逐项获取消息
foreach ($items as $v) {
$rt[$v] = call_user_func(array(&$this, 'get' . $v));
}
return $rt;
}
/**
* 获取用户的通知统计数目
*/
public function getUnreadCount()
{
/*获取消息过程省略,返回信息格式如下*/
$data['status'] = '获取信息状态';
$data['data'] = '信息详情';
return $data;
}
/**
* 获取全网喊话
*/
public function getAllnet()
{
/*获取消息过程