日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Http长连接的例子_亲测可用哦

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Http长连接的例子_亲测可用哦 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么事Http長連接:在網上有很多很多關于Http長連接的文章,但是我看了很多都看不懂。自己總結的所謂的http長連接就是在一請求一個頁面后,在服務器端不斷開http連接,而是通過response一直在定時的往頁面客戶端刷新數據。


二、servlet編寫

package servlet;import java.io.IOException; import java.text.SimpleDateFormat; import java.util.concurrent.TimeUnit;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;Long currTime = null;SimpleDateFormat sdf = null;public void init() throws ServletException {// 初始化一些參數super.init();currTime = System.currentTimeMillis();sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");}public void destroy() {super.destroy();}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 在get中直接調用doPost方法doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 長連接方式boolean flag = true;// 用來表示長連接是否已經被斷開(如果數據發送失敗了就說明是斷開了)while (true) {flag = this.sendData("jsFun", sdf.format(currTime), response);currTime = System.currentTimeMillis();if (!flag) {// 如果數據發送失敗,那么就退出了,說明頁面長連接已經斷開了break;}try {// 每5秒發送一次TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}}}/*** @Title: sendData* @Description: 用來定時向客戶端返回數據* @param jsFun要調用的js函數* @param data要發送的數據* @param response*/private boolean sendData(String jsFun, String data,HttpServletResponse response) {try {response.setContentType("text/html;charset=utf-8");/* 這句話比較重要,我們通過response給頁面返回一個js腳本,讓js執行父頁面的對應的jsFun,參數就是我們的data */response.getWriter().write("<script type=\"text/javascript\">parent." + jsFun + "(\""+ data + "\")</script>");response.flushBuffer();return true;} catch (Exception e) {System.err.println("long connection was broken!");return false;}}}

三、頁面編寫

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript"src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"></script> <title>測試頁面</title> </head> <body><!-- 定義一個form表單, 重要的是target="myiframe",這里把form的請求定向到了myiframe中,然后再myiframe中執行servlet中返回的腳本,調用myiframe的父頁面的jsFun,也就是本頁面的jsFun --><form action="" method="post" id="myForm" target="myiframe"></form><!-- iframe要隱藏哦 --><iframe id="myiframe" name="myiframe" style="display: none;"></iframe><div id="container" style="height: 800px"></div></body><script type="text/javascript">function jsFun(data) {//一直被后臺調用的方法$('#container').append("<br/>");$('#container').append(data);}function init() {//用戶進入頁面后就自動發起form表單的提交,激活長連接var action = "${pageContext.request.contextPath}/servlet/TestServlet";$('#myForm').attr("action", action);$('#myForm').submit();} </script><script type="text/javascript">$(function() {init();}); </script> </html>



四、通過tomcat啟動項目,查看運行結果



可以看到數據是每隔5條打印一次的,而且瀏覽器的頁面一直在轉圈圈,這就是http長連接的標志。


五、當頁面斷開連接的時候(刷新頁面或關閉頁面)


可以看到服務器會自動斷開連接,避免資源的浪費。

總結

以上是生活随笔為你收集整理的Http长连接的例子_亲测可用哦的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。