- 浏览: 1899090 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
jquery打印指定的div -
GentlemanQc:
...
quartz系列(二)spring3.2.5与quartz2.1.7集群版集成简要说明 -
静夜独窗:
你好,能说一下server.xml增加的配置是怎么影响性能的吗 ...
tomcat7.0性能优化-挑战极限精简版 -
beyondfengyu:
beyondfengyu 写道如果每个客户进程的时间不同步,时 ...
java并发(二十二)分布式锁 -
beyondfengyu:
如果每个客户进程的时间不同步,时间超前的进程是不是更容易得到锁 ...
java并发(二十二)分布式锁
从tomcat7.0.26之后开始支持websocket,建议大家使用tomcat7.0.30,期间版本的接口有一些改动。chrome默认支持websocket。其他浏览器可能由于安全原因,默认是关闭的。
index.jsp
有没有连到你的服务器
即时通信,聊天室,信息通知,等等
例如:可以实现XAMPP做即时通信,直接操作POP,SMTP实现web收发邮件。无需服务端程序介入
WEB开发中,服务器端推送消息
package com.panguso.phl.servlet; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.util.logging.Logger; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import org.apache.catalina.websocket.MessageInbound; import org.apache.catalina.websocket.StreamInbound; import org.apache.catalina.websocket.WebSocketServlet; import org.apache.catalina.websocket.WsOutbound; /** * * @author piaohailin * 2012-09-08 * */ @WebServlet(urlPatterns = "/echo.ws") // 处理WebSocket的Servlet需要继承自WebSocketServlet,这一点和7.0.27仍然一样 public class EchoServlet extends WebSocketServlet { // Log private Logger logger = Logger.getLogger(EchoServlet.class.getName()); @Override // 与7.0.27不同的,Tomcat改变了createWebSocketInbound方法的定义,增加了一个HttpServletRequest参数 // 这样我们也可以从request参数中获取更多请求方的信息 protected StreamInbound createWebSocketInbound(String subProtocol, HttpServletRequest request) { // Log // logger.setLevel(java.util.logging.Level.ALL); logger.info("request ws servlet"); // 方法仍然是返回一个StreamInbound实例,这里采用实现他的子类MessageInbound // 只用实现下面四个事件处理函数(其实onClose和onOpen有缺省实现) return new MessageInbound() { // WebSocket关闭事件,参数status应该来自org.apache.catalina.websocket.Constants中定义的几个常量,可以参考文档或者核对一下Tomcat的源码 @Override protected void onClose(int status) { // Log logger.info("Web Socket Closed: " + status); } // WebSocket握手完成,创建完毕,WsOutbound用于向客户端发送数据 @Override protected void onOpen(WsOutbound outbound) { // Log logger.info("Web Socket Open!"); } // 有二进制消息数据到达,暂时没研究出这个函数什么情况下触发,js的WebSocket按理说应该只能send文本信息才对 @Override protected void onBinaryMessage(ByteBuffer buffer) throws IOException { // Log logger.info("Binary Message Receive: " + buffer.remaining()); // Nothing } // 有文本消息数据到达 @Override protected void onTextMessage(CharBuffer buffer) throws IOException { // Log logger.info("Text Message Receive: " + buffer.remaining()); // getWsOutbound可以返回当前的WsOutbound,通过他向客户端回传数据,这里采用的是nio的CharBuffer getWsOutbound().writeTextMessage(buffer); //模拟服务器通知浏览器,从浏览器就会看,每3秒收到1条服务器消息 // for (int i = 0; i < 3; i++) { // try { // Thread.sleep(3000); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // getWsOutbound().writeTextMessage(CharBuffer.wrap(String.valueOf(i).subSequence(0, 1))); // } } }; } }
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript"> var ws = null; function startServer() { // 设定WebSocket,注意协议是ws,请求是指向对应的WebSocketServlet的 var url = "ws://127.0.0.1:8080/echo.ws"; // 创建WebSocket实例,下面那个MozWebSocket是Firefox的实现 if ('WebSocket' in window) { ws = new WebSocket(url); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(url); } else { alert('Unsupported.'); return; } // WebSocket握手完成,连接成功的回调 // 有个疑问,按理说new WebSocket的时候就会开始连接了,如果在设置onopen以前连接成功,是否还会触发这个回调 ws.onopen = function() { alert('Opened!'); }; // 收到服务器发送的文本消息, event.data表示文本内容 ws.onmessage = function(event) { alert('Receive message: ' + event.data); }; // 关闭WebSocket的回调 ws.onclose = function() { alert('Closed!'); }; } function sendMyMessage() { var textMessage = document.getElementById('textMessage').value; if (ws != null && textMessage != '') { // 通过WebSocket想向服务器发送一个文本信息 ws.send(textMessage); } } </script> </head> <body> <body onload="startServer()"> <input type="text" id="textMessage" size="20" /> <input type="button" onclick="sendMyMessage()" value="Send"> </body> </html>
评论
9 楼
allan_chan
2013-11-08
cqcya 写道
我在本机能够访问,但是从别的机器上访问总提示“closed",不知道是什么原因?
有没有连到你的服务器
8 楼
yanjingjiangjun
2013-06-28
html5 blob文件发送会用到onBinaryMessage
7 楼
cqcya
2013-05-20
我在本机能够访问,但是从别的机器上访问总提示“closed",不知道是什么原因?
6 楼
netkiller.github.com
2012-09-14
xiaozan 写道
请问,这个技术在应用方面可以做哪些功能
即时通信,聊天室,信息通知,等等
例如:可以实现XAMPP做即时通信,直接操作POP,SMTP实现web收发邮件。无需服务端程序介入
5 楼
wukele
2012-09-08
怎么实现,推送到指定的客户端
4 楼
hebdan
2012-09-08
跟DWR的 reverse ajax 有何区别?
3 楼
fffddd
2012-09-08
安全没有看到有安全相关的验证。随便谁都可以连到你的ws上来?
还有每个账号和每个WS连的关系也没看到。怎么区分发给A用户的信息不会发到B哪里去?
还有每个账号和每个WS连的关系也没看到。怎么区分发给A用户的信息不会发到B哪里去?
2 楼
85977328
2012-09-08
xiaozan 写道
请问,这个技术在应用方面可以做哪些功能
WEB开发中,服务器端推送消息
1 楼
xiaozan
2012-09-08
请问,这个技术在应用方面可以做哪些功能
发表评论
-
java for 的几种用法
2014-12-02 09:59 1260J2SE 1.5提供了另一 ... -
finally不执行的陷阱
2014-05-16 09:23 1123写了个DEMO,说明下finally在System.exit( ... -
URI和URL的区别
2014-03-26 10:38 1298String HttpServletRequest.getRe ... -
Iterator与ListIterator区别
2014-03-23 22:21 1137Iterator:只能正向遍历集合,适用于获取移除元素。Lis ... -
快速失败特性
2014-03-23 22:20 1148从高级别层次来说快速失败是一个系统或软件对于其故障做出 ... -
java继承静态方法复写
2014-03-12 09:28 4421最近和人交流,遇到了这样一个问题,就是继承当中,静态方法复写的 ... -
关于return和finally
2014-03-11 10:19 2836本来return和finally也不是个事。之前看虚拟机运行原 ... -
JVM内存分析系列(十三)内存实践理解
2014-01-22 10:09 3120java堆 包括 新生代:eden,survival(from ... -
JVM内存分析系列(十二)G1垃圾收集器的使用
2014-01-16 17:10 11519Garbage First(G1)致力于在多CPU和大内存服务 ... -
JVM内存分析系列(十一)GC基本情况与CMS垃圾收集器调优
2014-01-16 11:44 11599初始标记 CMS-initial-mark 并发标记 CMS- ... -
eclipse内存优化
2014-02-26 14:00 1547修改eclipse的配置文件,添加或者修改参数如下,其中XX: ... -
远程调试(二)JVM
2014-01-10 11:43 1745从J2SE 1.4.2开始,就已经提出并实现了JavaTM P ... -
JVM内存分析系列(九)JDK监控和故障处理工具
2014-01-08 18:33 2072jps JVM Process Status Tool,显示指 ... -
guava--google----用来替代commons的jar包
2014-01-06 18:21 16833Guava 是一个 Google ... -
JVM内存分析系列(八)垃圾收集器介绍及性能指标
2013-12-30 13:33 2037内存回收的具体实现。 停顿时间越短就越适合需要 ... -
JVM内存分析系列(七)垃圾收集算法
2013-12-30 12:58 1120内存回收的方法论 标记-清除算法 Mark-Sweep 分为 ... -
JVM内存分析系列(六)对象存活判断
2013-12-26 11:10 1138对象存活常用2种算法 引用计数算法 给对象中添加一个 ... -
JVM内存分析系列(五)浅谈finalize()方法
2013-12-28 18:47 1470根搜索算法中不可达对象在回收之前,要进行二次标记。 第 ... -
JVM内存分析系列(四)对象4种引用
2013-12-25 20:07 1323强引用:只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象 ... -
JVM内存分析系列(三)JVM内存模型初步
2013-12-25 17:09 1163根据《Java虚拟机规范(第二版)》的规定,结构如下 1 ...
相关推荐
4. 在Web应用的HTML页面中引入"comet4j.js",设置客户端的监听器,以便接收服务器推送的数据。 5. 测试和优化应用程序,确保其在不同网络环境和浏览器下的兼容性和性能。 通过这种方式,Comet4j为开发者提供了一种...
启动Tomcat服务器,访问你的Web应用,确保客户端能够成功建立连接并接收到服务器推送的数据。使用浏览器的开发者工具来检查网络请求和响应,以及可能出现的错误。 总结来说,Comet4J.js和comet4j-tomcat7.jar是...
虽然Comet4J-tomcat7.jar不支持Tomcat8及以上版本,但可以考虑使用其他服务器推送技术,如WebSocket,它已被现代浏览器广泛支持,并且有更丰富的库和工具。 通过理解这些关键概念和步骤,你可以有效地在Tomcat7...
WebSocket日志实时推送技术在现代Web应用中扮演着重要角色,尤其对于监控、故障排查以及实时数据分析至关重要。本文将深入探讨WebSocket协议、Linux的`tail -f`命令、Java编程在实现这一功能中的应用,以及如何整合...
Atmosphere框架的核心概念之一是Comet,这是一种用于实现服务器向客户端推送数据的技术。在Atmosphere框架中,它通过异步处理HTTP请求来实现,允许服务器在请求保持打开状态的同时处理多个事件,而无需客户端不断地...
Servlet 4.0引入了对HTTP/2的支持,提高了Web应用的性能,允许服务器推送内容,减少了网络延迟。 3. **WebSocket规范**:除了Servlet,Tomcat 8.5.x还支持WebSocket 1.1规范,这是一个双向通信协议,使得浏览器和...
服务器推送技术是现代Web开发中一个重要的概念,它允许服务器主动向客户端发送数据,而不仅仅是响应客户端的请求。Comet4j就是一种基于Java实现的服务器推送技术框架,旨在简化实时Web应用的开发过程。本资源包包含...
WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在任意方向...了解并掌握WebSocket的基本概念、工作流程以及编程接口,对于现代Web开发人员来说是必不可少的技能之一。
Servlet 4.0带来了诸如HTTP/2协议的原生支持,使得应用程序可以利用HTTP/2的优势,如多路复用、头部压缩和服务器推送等,提高性能和响应速度。 2. **HTTP/2**:Tomcat 9.0.0.M13实现了HTTP/2协议,允许更高效的网络...
这个"基于WebSocket+Tomcat7+HTML5的消息推送.zip"项目,显然旨在教你如何利用WebSocket、Tomcat7服务器和HTML5技术实现实时的消息推送功能。Tomcat7是一个流行的开源Java Servlet容器,它可以运行基于Java的Web应用...
WebSocket是Web应用中实现双向通信的关键技术,它允许服务器主动向客户端推送数据,极大地提高了实时性。本项目源码展示了如何使用Java进行WebSocket的整合,从而实现服务器消息推送功能。以下将详细介绍WebSocket的...
总的来说,"phonegap+websocket+tomcat实现移动终端推送功能"项目涉及到的技术栈包括前端的PhoneGap应用开发、WebSocket的JavaScript客户端实现、后端的Tomcat服务器配置以及WebSocket的Java服务端编程。通过这一...
1. **Servlet 4.0支持**:Tomcat 8.5引入了对Servlet 4.0规范的支持,带来了HTTP/2协议的原生支持,这使得Web应用程序能够利用多路复用、服务器推送等特性,从而提高性能和响应速度。 2. **NIO2连接器**:除了传统...
【标题】:“Tomcat实现推...以上内容详细介绍了在Tomcat中实现推送技术的基本原理、常用方法、配置步骤以及示例代码,希望对你理解服务器推送有帮助。实际应用中,还需要考虑如负载均衡、安全性、性能优化等更多因素。
WebSocket是HTML5中引入的一种在单个TCP连接上进行全双工通信的协议,它允许服务器端主动向客户端推送数据,极大地改善了实时性。在本文档中,我们将讨论如何在Java环境中,结合Tomcat服务器和WebSocket技术进行应用...
此外,Tomcat 7.0.42引入了对WebSocket的支持,这是一个在HTML5中引入的新特性,允许双向通信,使得服务器可以主动向客户端推送数据。 在安全方面,Tomcat 7.0.42增强了安全管理,支持JAAS(Java Authentication ...
WebSocket是Web交互技术的一种革新,它为实时双向通信提供了标准协议。在传统的HTTP协议中,客户端与服务器之间的通信是请求-响应...在实际项目中,这种技术可以应用于在线聊天、股票实时推送、游戏同步等多种场景。
WebSocket是Web应用中实现双向通信的关键技术,它允许服务器与客户端之间进行持续的连接,而不仅仅是HTTP请求-响应模式。Spring Boot是Java生态系统中的一个流行框架,用于快速开发微服务和Web应用。Netty则是一个高...
总的来说,通过替换这些特定的Tomcat库,你可以使你的服务器环境准备好支持WebSocket通信,从而开启更高效、实时的Web应用程序开发。但请注意,这样做可能会影响其他非WebSocket相关的应用,所以在生产环境中操作前...
在实际开发中,WebSocket可以应用于多种实时交互场景,如在线聊天、股票交易更新、游戏同步、实时推送通知等。使用WebSocket,开发者可以构建低延迟、高效率的实时Web应用程序。 总结来说,WebSocket提供了高效、...