Workers異步任務
開始(注冊):
1 divobjx=document.getElementsByTagName("div")[0]; 2 var workdong=new Worker("dong.js");//創建work對象 3 workdong.onmessage=function(ee){ 4 var resx=ee.data;//得到數據 5 divobjx.innerHTML=resx;//數據顯示 6 }
任務文件(dong.js):
1 var conutx =0; 2 function confun(){ 3 postMessage(conutx);//發送消息 4 conutx++; 5 setTimeout(confun,1000);//遞歸調用 6 } 7 confun();
停止任務:
1 if(workdong){ 2 workdong.terminate(); 3 workdong=null; 4 }
獲取服務器實時數據
客戶端實現EventSource,定時訪問(一般在2-3秒頻率)服務器以刷新頁面,每次訪問會執行完服務器腳本的所有內容,服務器可以使用ob_flush();flush();進行一次訪問數據的多條分別輸出。
客戶端:
1 divobjx=document.getElementsByTagName("div")[0]; 2 divobjx1=document.getElementsByTagName("div")[1]; 3 //異步任務開始 4 var ev=new EventSource("dong.php"); 5 ev.onopen=function(e){ 6 divobjx1.innerHTML="鏈接打開中"; 7 } 8 9 //獲取數據方法一 10 //ev.onmessage=function(e){ 11 // var resx=e.data;//得到數據 12 // divobjx.innerHTML=resx;//數據顯示 13 //} 14 15 //獲取數據方法二 16 ev.addEventListener("newdong",function(e){ 17 divobjx.innerHTML=e.data; 18 }); 19 ev.onerror=function(e){ 20 divobjx1.innerHTML="鏈接錯誤或當次執行完畢"; 21 }
服務器:
1 <?php 2 header('Content-Type: text/event-stream'); 3 for($i=0;$i<5;$i++){ 4 //事件名,如果使用方法一進行數據獲取,則必須省略此句 5 echo "event:newdong\n"; 6 //數據 7 echo "data:dongxioadong東東".$i."\n\n"; 8 //刷新,實現逐條發送 9 ob_flush(); 10 flush(); 11 sleep(1); 12 } 13 ?>