Thinkphp結(jié)合AJAX長(zhǎng)輪詢實(shí)現(xiàn)PC與APP推送詳解
前言
本文主要給大家介紹的關(guān)于Thinkphp結(jié)合AJAX長(zhǎng)輪詢實(shí)現(xiàn)PC與APP推送的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),話不多說,來一起看看詳細(xì)的介紹。
實(shí)現(xiàn)邏輯
某個(gè)操作(比如新建一條公告)后,觸發(fā)同時(shí)推送消息給APP或是移動(dòng)WEB的所有用戶或指定用戶。
不論性能,總還是有人會(huì)用到吧,實(shí)現(xiàn)如下(基于Thinkphp5消息推送):
PHP長(zhǎng)輪詢
/*
* long輪詢 API查詢接口
*/
public function id_log()
{
if (request()->isPost()) {
$id = $this->param['id'];
set_time_limit(0);
$id_log = Db::name('table')->alias('c')
->join('table cc', 'c.youname=cc.youname', 'left')
->join('table a', 'cc.youname =a.youname ', 'left')
->join('table u', 'c.youname =u.youname ', 'left')
->field('')
->where('', $id)
->order('log_time desc')
->limit(1)
->select();
while (true) {
if ($id_log) {
$id_log_set = Db::name('table2')
->where('', $id)
->limit(1)
->setField('log_flag', '1');
$this->response($id_log);
}
$this->wrong(404100);
usleep(2000);
}
};
}
換上你自己的表和相關(guān)的關(guān)聯(lián)字段。
推送消息創(chuàng)建方法
/**
* 創(chuàng)建消息日志 觸發(fā)操作方法
* @param string $log_content 日志內(nèi)容
* @param string $log_type 日志類型
* @param int $log_c_id A用戶ID
* @param string $log_user B用戶ID
* @param string $log_admin PC
* @param string $log_status
* @return array
*/
function createLog($log_c_id, $log_type, $log_content, $log_admin, $log_user,$log_status)
{
$data = [
'log_c_id' => $log_c_id,
'log_ip' => get_client_ip(),
'log_admin' => $log_admin,
'log_time' => date("Y-m-d H:i:s", time()),
'log_url' => get_url(),
'log_type' => $log_type,
'log_content' => $log_content,
'log_user' => $log_user,
'log_status'=>$log_status
];
$logadd = \think\Db::name('table')->insertGetId($data);
return $logadd;
}
采用數(shù)據(jù)庫存消息并檢測(cè)和設(shè)計(jì)flag的形式推,不然離線消息就沒法推了,同樣的要修改成你自己的數(shù)據(jù)結(jié)構(gòu)!
AJAX長(zhǎng)輪詢
var getting = {
url: '{:url("youapi/url")}',
dataType: 'json',
success: function (res) {
$(".count").text($('.llt').children().size());
$(".llt").remove();
if(res.length!=null){
$.each(res, function (index, item) {
$(".notification").append('<li class="llt" data-ccid="' + item.id + '"><a href="{:url(" rel="external nofollow" admin/carloan/edit")}?id='+item.log_c_id+'"><span class="label label-info"><i class="icon-bullhorn"></i></span><span class="message">' + item.u_name + ':' + item.log_content + '</span><span class="time"><span class="liveTime">' + item.log_time + '</span></span></a></li>');
});
}else{
}
}
};
//關(guān)鍵在這里,Ajax定時(shí)訪問服務(wù)端,不斷獲取數(shù)據(jù) ,這里是1秒請(qǐng)求一次。
window.setInterval(function () {
$.ajax(getting)
}, 1000);
總結(jié)
好了,大概就這樣,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持
相關(guān)文章
PHP如何通過date() 函數(shù)格式化顯示時(shí)間
這篇文章主要介紹了PHP如何通過date() 函數(shù)格式化顯示時(shí)間,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
PHP排序算法之直接插入排序(Straight Insertion Sort)實(shí)例分析
這篇文章主要介紹了PHP排序算法之直接插入排序(Straight Insertion Sort),結(jié)合實(shí)例形式較為詳細(xì)的分析了直接插入排序算法的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
本文給大家分享的是如何讓thinkPHP在低版本的Nginx下支持PATHINFO去掉index.php路徑的方法,十分的簡(jiǎn)單實(shí)用,思路也很巧妙,有需要的小伙伴可以參考下2016-05-05
PHP在同一域名下兩個(gè)不同的項(xiàng)目做獨(dú)立登錄機(jī)制詳解
這篇文章主要給大家介紹了關(guān)于PHP在同一域名下兩個(gè)不同的項(xiàng)目如何做獨(dú)立登錄機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-09-09
php Undefined index和Undefined variable的解決方法
這段時(shí)間在做項(xiàng)目過程中老是出現(xiàn)這個(gè)提示,起初是用$act來接受表單post過來的數(shù)據(jù)2008-03-03
啟用Csrf后POST數(shù)據(jù)時(shí)出現(xiàn)的400錯(cuò)誤
這篇文章主要介紹了啟用Csrf后POST數(shù)據(jù)時(shí)出現(xiàn)的400錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下2015-07-07
php源碼分析之DZX1.5加密解密函數(shù)authcode用法
這篇文章主要介紹了php源碼分析之DZX1.5加密解密函數(shù)authcode用法,實(shí)例分析了DZX1.5中authcode函數(shù)加密與解密的使用技巧,需要的朋友可以參考下2015-06-06

