JQuery Comet是一種技術,它使用Ajax長輪詢與服務器進行實時通信。這使得Web應用程序能夠在不刷新整個頁面的情況下從服務器接收更新。
為了實現JQuery Comet,通常會在服務器上使用Java。在Java中,使用輪詢的方式來保持長連接,并在需要時接收和發送數據。下面是一個簡單的Java實現:
public class CometServlet extends HttpServlet { private static final long serialVersionUID = 7504269772752131170L; private final ListasyncContexts = new CopyOnWriteArrayList<>(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", -1); final AsyncContext asyncContext = request.startAsync(request, response); asyncContext.setTimeout(0); //永不超時 asyncContexts.add(asyncContext); asyncContext.addListener(new AsyncListener() { public void onComplete(AsyncEvent event) throws IOException { asyncContexts.remove(asyncContext); } public void onTimeout(AsyncEvent event) throws IOException { asyncContexts.remove(asyncContext); } public void onError(AsyncEvent event) throws IOException { asyncContexts.remove(asyncContext); } public void onStartAsync(AsyncEvent event) throws IOException { } }); } public void sendData(String data) { for (AsyncContext asyncContext : asyncContexts) { try { PrintWriter out = asyncContext.getResponse().getWriter(); out.write(data); out.flush(); asyncContext.complete(); } catch (IOException e) { } } } }
在這段代碼中,我們創建了一個名為CometServlet的Java Servlet。在doGet方法中,我們設置響應頭和超時時間,并將AsyncContext添加到列表中。同樣重要的是在AsyncContext上添加一個AsyncListener,以便在連接關閉,超時或錯誤發生時從列表中移除它。最后,我們實現了一個名為sendData的方法,用于將數據發送給所有處于長連接狀態的客戶端。
這就是JQuery Comet和Java的一個簡單示例。使用這種技術可以使得我們的Web應用程序更具交互性和響應性,而不必刷新整個頁面。