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)容,分享出來(lái)供大家參考學(xué)習(xí),話不多說(shuō),來(lái)一起看看詳細(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ù)庫(kù)存消息并檢測(cè)和設(shè)計(jì)flag的形式推,不然離線消息就沒(méi)法推了,同樣的要修改成你自己的數(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èn)服務(wù)端,不斷獲取數(shù)據(jù) ,這里是1秒請(qǐng)求一次。
window.setInterval(function () {
$.ajax(getting)
}, 1000);
總結(jié)
好了,大概就這樣,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持
- 基于springboot 長(zhǎng)輪詢的實(shí)現(xiàn)操作
- JS實(shí)現(xiàn)websocket長(zhǎng)輪詢實(shí)時(shí)消息提示的效果
- .Net MVC實(shí)現(xiàn)長(zhǎng)輪詢
- javascript和jQuery實(shí)現(xiàn)網(wǎng)頁(yè)實(shí)時(shí)聊天的ajax長(zhǎng)輪詢
- jquery與php結(jié)合實(shí)現(xiàn)AJAX長(zhǎng)輪詢(LongPoll)
- PHP實(shí)現(xiàn)長(zhǎng)輪詢消息實(shí)時(shí)推送功能代碼實(shí)例講解
相關(guān)文章
PHP常見(jiàn)加密函數(shù)用法示例【crypt與md5】
這篇文章主要介紹了PHP常見(jiàn)加密函數(shù)用法,結(jié)合實(shí)例形式分析了crypt與md5函數(shù)進(jìn)行加密操作相關(guān)使用技巧與注意事項(xiàng),需要的朋友可以參考下2019-01-01
通過(guò)PHP設(shè)置BugFree獲取郵箱通知
在本篇文章里小編給大家分享了關(guān)于通過(guò)PHP設(shè)置BugFree獲取郵箱通知的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。2019-04-04
PHP和Selenium搭建高效網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)技術(shù)探索
隨著信息時(shí)代的到來(lái),網(wǎng)站被認(rèn)為是獲取信息的主要途徑之一,但是,手動(dòng)獲取網(wǎng)站上的信息是非常繁瑣的,因此出現(xiàn)了自動(dòng)抓取網(wǎng)頁(yè)的方式——網(wǎng)絡(luò)爬蟲(chóng),這篇文章將介紹如何使用PHP和Selenium搭建一個(gè)高效的網(wǎng)絡(luò)爬蟲(chóng)來(lái)自動(dòng)收集信息2024-01-01

