Ajax實現Web長串連__Ajax

來源:互聯網
上載者:User

這篇文章寫的很好Web 通訊 之 長串連、長輪詢(long polling),受益匪淺。 1.什麼是長輪詢,長串連

用通俗易懂的話來說,就是用戶端不停的向伺服器發送請求以擷取最新的資料資訊。這裡的“不停”其實是有停止的,只是我們人眼無法分辨是否停止,它只是一種快速的停下然後又立即開始串連而已。
2.我的應用程式情境

想做一個二維碼簽到系統.
主要要求:
- 在瀏覽器上發布簽到
- 一個二維碼只能用一次
- 當瀏覽器上顯示的二維碼被使用過後,自動重新整理成新的二維碼 3.具體代碼 頁面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title></title></head><script type="text/javascript">  function myajax() {    var myhttp;    myhttp=new XMLHttpRequest();    myhttp.open("GET", "qrajax", true);    myhttp.send();    myhttp.onreadystatechange=function()    {      if (myhttp.readyState==4 && myhttp.status==200)      {        var msg=myhttp.responseText;        document.getElementById("asd").innerHTML=msg;        if(msg!="failed"){          document.getElementById("QRcode").src=                  "qrcoder?flag="+Math.random()+"&teacherID="+document.getElementById("tecID").value;        }      }    }  }  //長輪詢,10秒發送一次ajax請求  window.setInterval(myajax,10000);</script><body><textarea id="asd"></textarea><img src="qr" id="qrajax"/><input type="text" id="tecID"/><button type="button" onclick="myajax()">Change Content</button></body></html>
伺服器端
package com.servlet;import com.service.QRService;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.io.PrintWriter;public class QRAjax extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request,response);    }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        HttpSession session=request.getSession();        QRService service=new QRService();        PrintWriter out = response.getWriter();        //計時        int time=0;        if(session!=null){            //長輪詢            while(true) {                time++;                //判斷二維碼是否被使用過                if (service.isReflash()) {                    out.print("no "+session.getAttribute("recordCount")+" ");                    break;                }else{                    //保持10秒                    if(time>=10){                        out.print("failed");                        break;                    }else {                        try {                            //保持住,1秒迴圈一次                            Thread.sleep(1000);                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                }            }        }        out.close();    }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.