服务器推送技术comet(AJAX长轮询)
来源:互联网 发布:方正字库 mac 编辑:程序博客网 时间:2024/04/30 11:21
服务器推送技术
推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接。当服务器需要再次发送一批数据时,浏览器显示数据并保持连接。以后,服务器仍然可以发送批量数据,浏览器继续显示数据,依次类推。
第一步 : jar包准备
catalina.jar去网上下载即可
将jar包放入tomcat的lib中,修改server.xml中的<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8088" redirectport="8443" connectiontimeout="20000" />主要是修改了协议,因为长轮询使用的不是HTTP/1.1协议。
第二步 新建项目
在javaweb项目中也需要添加catalina.jar,不然会报找不到jar包
代码如下:产生随机数字
package com.java.comet;import java.io.IOException;import java.io.PrintWriter;import java.util.Random;import java.util.Scanner;import javax.servlet.ServletResponse;public class RandomSender implements Runnable{protected boolean running=true;private ServletResponse response;Random rand;public RandomSender(ServletResponse response) {this.response = response;rand=new Random();}public void run() {while(running){try{PrintWriter out = response.getWriter();int val=rand.nextInt(10);if(val>5){//out.write(rand.nextInt(10));out.println(val);}else{out.println("No");}out.flush();response.flushBuffer();try{Thread.sleep(1000);}catch(InterruptedException e){}}catch(IOException e){e.printStackTrace();}}}}服务端代码:
package com.java.comet;import java.io.IOException;import java.io.PrintWriter;import java.util.Scanner;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.catalina.CometEvent;import org.apache.catalina.CometEvent.EventType;import org.apache.catalina.CometProcessor;public class CometService extends HttpServlet implements CometProcessor {private RandomSender randomSender=null;private static final Integer TIMEOUT=60 * 1000;public void event(CometEvent event) throws IOException, ServletException { System.out.println("访问event()方法");HttpServletRequest request=event.getHttpServletRequest();HttpServletResponse response=event.getHttpServletResponse();if(event.getEventType() == CometEvent.EventType.BEGIN){request.setAttribute("org.apaphe.tomcat.comet.timeout", TIMEOUT);randomSender = new RandomSender(response);Thread thread = new Thread(randomSender);thread.start();}else if(event.getEventType() == CometEvent.EventType.ERROR){event.close();}else if(event.getEventType() == CometEvent.EventType.END){event.close();}else if(event.getEventType() == CometEvent.EventType.READ){throw new UnsupportedOperationException("服务器端没有接收数据");}}}
web.xml配置<servlet> <servlet-name>comet</servlet-name> <servlet-class>com.java.comet.CometService</servlet-class> </servlet> <servlet-mapping> <servlet-name>comet</servlet-name> <url-pattern>/comet</url-pattern> </servlet-mapping>
前端访问页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> <script> function CometEx() { var request = new XMLHttpRequest(); request.open("GET", "http://localhost:8088/comet/comet", true); //request.setRequestHeader("Content-Type", "application/x-javascript;"); request.onreadystatechange = function() { if (request.readyState ==3 && request.status == 200) { if(request.responseText){ document.getElementById("content").innerHTML=request.responseText; } //alert(request.responseText); } }; request.send(null); } function test(){ var temp = document.getElementsByName("r"); for(var i=0;i<temp.length;i++) { if(temp[i].checked) alert(temp[i].value); } } </script> </head> <body > <input type="button" id="btn" onclick="CometEx()" value="点击"/> <div id="content"> </div> <!-- <div> <input type="radio" name="r" value="a" onclick="test()"/> <input type="radio" name="r" value="b" onclick="test()"/> <input type="radio" name="r" value="c" onclick="test()"/> </div> --> </body></html>配置文件和代码到此结束。
0 0
- 服务器推送技术comet(AJAX长轮询)
- Comet服务器推送技术
- comet服务器推送技术
- Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)
- Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)
- Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)
- Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)
- Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)
- java web 服务器推送技术 comet实现(原理)
- Web应用服务器推送技术Comet
- javascript/php实现comet(ajax长轮询)推送功能
- js+php实现comet(ajax长轮询)推送功能
- Comet推送技术
- comet推送技术
- 一种新的 Web 服务器推送技术 - comet
- 基于comet服务器推送技术(web实时聊天)
- 基于comet服务器推送技术(web实时聊天)
- .NET基于comet服务器推送技术(web实时聊天)
- c++ explicit含义
- 软件培训机构的网络营销那点事儿
- one-to-many关系的更新问题
- AES 加密 文件 asp.net 版
- java中的动态绑定和静态绑定
- 服务器推送技术comet(AJAX长轮询)
- Tcpdump命令详解
- 有关python给类绑定方法
- 怎样解决putty终端乱码的方法
- MySQL 在ubuntu12.04LTS 本地可以连接,远程连接不上的解决
- 黑马程序员-java面向对象的概念及封装总结
- 一步一步学zedboard之四创建zedboard的启动文件
- 二叉树先序遍历
- 《C程序设计语言》笔记(三)