web前端異步數據交互(長連接)


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 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM