經(jīng)理給的要求:然后另外寫(xiě)個(gè)php程序,定時(shí)讀取這個(gè)表格,然后把消息發(fā)送給代理的異步通知的地址上。。。
數(shù)據(jù)庫(kù)表我已經(jīng)弄好了,但不知道怎么弄異步通知。。。沒(méi)一點(diǎn)概念。。。誰(shuí)幫助下。
后來(lái)經(jīng)理又說(shuō)nodejs會(huì)效率高點(diǎn),但我一點(diǎn)沒(méi)接處過(guò)nodejs,誰(shuí)能說(shuō)下nodejs做這個(gè)的例子。
學(xué)習(xí)是最好的投資!
其實(shí)都是跑一個(gè)后臺(tái)處理進(jìn)程實(shí)現(xiàn),或者使用系統(tǒng)定時(shí)任務(wù)。
1、php 用守護(hù)進(jìn)程,在一個(gè)while里面循環(huán)判斷時(shí)間,到時(shí)間之行讀取表格操作
2、nodejs,也是跑一個(gè)服務(wù),setTimeout的方式實(shí)現(xiàn)
3、使用系統(tǒng)定時(shí)任務(wù)cron 觸發(fā)程序
nodejs+socket.io+php完全能實(shí)現(xiàn)!
node監(jiān)聽(tīng)在一個(gè)端口上,客戶(hù)端訪問(wèn)頁(yè)面,通過(guò)websocket接收消息。像聊天室一樣
樓主可以先google下socket.io,對(duì)你有很大幫助。
注:慎用ajax,此需求ajax太笨重
文件名 crond.php
<?php
do {
$data = []; // 讀取Excel代碼,讀取完之后是個(gè)數(shù)組沒(méi)問(wèn)題吧
curl();// 使用CURL將數(shù)據(jù)傳輸?shù)疆惒酵ㄖ刂? sleep(3600);// 休眠一小時(shí)
} while(true);
運(yùn)行方式,打開(kāi)CMD或者終端,找到PHP.exe/php程序所在路徑,假設(shè)為\usr\bin\php
,windows下假設(shè)c:\php\php.exe
,執(zhí)行
php crond.php
使用命令行模式運(yùn)行PHP腳本時(shí),不存在超時(shí)概念
異步的話用ajax就行了,最簡(jiǎn)單。php做一個(gè)定時(shí)執(zhí)行的頁(yè)面。通過(guò)ajax異步提交到數(shù)據(jù)庫(kù)。
php并沒(méi)有異步執(zhí)行吧??異步是用ajax來(lái)實(shí)現(xiàn)的好不好,用jquery會(huì)不?
$.ajax({
type:'GET',
url:"請(qǐng)求地址",
dataType:"json",
data:"要傳的數(shù)據(jù)"
success:function(data){
}
});
你要是定時(shí)傳送 建議你用js寫(xiě)個(gè)定時(shí)器,或者寫(xiě)個(gè)死循環(huán) sleep下就可以的 。將數(shù)據(jù)用ajax定時(shí)調(diào)取你寫(xiě)的php文檔 而文檔就是你要定時(shí)執(zhí)行的內(nèi)容!可以了不??
服務(wù)器設(shè)置定時(shí)任務(wù),每隔一段時(shí)間執(zhí)行php 腳本(查詢(xún)數(shù)據(jù)庫(kù),發(fā)送通知)
樓上幾個(gè)說(shuō)用ajax 的,這種方式可以實(shí)現(xiàn)功能但是 得有一個(gè)頁(yè)面在瀏覽器中運(yùn)行吧?
關(guān)了頁(yè)面就廢了
看你題干的意思,如果延時(shí)要求不是精確到秒的話,用php完全可以迅速完成的,
利用系統(tǒng)的定時(shí)任務(wù),定時(shí)執(zhí)行你的php腳本就行了,php腳本里面就查下表格,然后發(fā)送消息就行了,當(dāng)然了,這是在cli模式下執(zhí)行,沒(méi)有在web下面執(zhí)行,也就沒(méi)有頁(yè)面上的提醒功能了。
const TIME = 3600 * 10;
const request = require('request'); //一個(gè)NodeJS模塊
function sendMsg(){
//給你的服務(wù)器發(fā)數(shù)據(jù)
request.post('http://127.0.0.1/your-interface', (err, response) => {
}).form({
data: 'ssss'
});
setTimeout(sendMsg, TIME);//隔一段時(shí)間執(zhí)行
}
sendMsg();//開(kāi)始執(zhí)行
思路就是使用websocket
nodejs本身啟動(dòng)后就是一個(gè)服務(wù),內(nèi)置的socket.io可以方便的建立websocket鏈接
第一種方案:自己寫(xiě)代碼,創(chuàng)建守護(hù)進(jìn)程,建立socket監(jiān)聽(tīng)
第二種方案:使用php擴(kuò)展,swoole,不建議新手使用
第三種方案:使用workerman(php寫(xiě)的),啟動(dòng)守護(hù)進(jìn)程
前端的處理就是使用websocket和創(chuàng)建的服務(wù)器建立長(zhǎng)連接通訊就行了
使用隊(duì)列
守護(hù)進(jìn)程來(lái)消耗隊(duì)列中的數(shù)據(jù),新數(shù)據(jù)直接打入隊(duì)列中,守護(hù)進(jìn)程將隊(duì)列中的數(shù)據(jù)消耗掉,分發(fā)到每個(gè)客戶(hù)端。
不用隊(duì)列也可以的,這樣只是為了防止消息太多會(huì)阻塞,可以使用workerman中的分發(fā)器,共享通訊到每個(gè)新創(chuàng)建的子進(jìn)程,然后由子進(jìn)程分發(fā)給不同的客戶(hù)端。