- 浏览: 1870975 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1221J2SE 1.5提供了另一 ... -
finally不执行的陷阱
2014-05-16 09:23 1065写了个DEMO,说明下finally在System.exit( ... -
URI和URL的区别
2014-03-26 10:38 1251String HttpServletRequest.getRe ... -
Iterator与ListIterator区别
2014-03-23 22:21 1088Iterator:只能正向遍历集合,适用于获取移除元素。Lis ... -
快速失败特性
2014-03-23 22:20 1078从高级别层次来说快速失败是一个系统或软件对于其故障做出 ... -
java继承静态方法复写
2014-03-12 09:28 4373最近和人交流,遇到了这样一个问题,就是继承当中,静态方法复写的 ... -
关于return和finally
2014-03-11 10:19 2794本来return和finally也不是个事。之前看虚拟机运行原 ... -
JVM内存分析系列(十三)内存实践理解
2014-01-22 10:09 3092java堆 包括 新生代:eden,survival(from ... -
JVM内存分析系列(十二)G1垃圾收集器的使用
2014-01-16 17:10 11474Garbage First(G1)致力于在多CPU和大内存服务 ... -
JVM内存分析系列(十一)GC基本情况与CMS垃圾收集器调优
2014-01-16 11:44 11529初始标记 CMS-initial-mark 并发标记 CMS- ... -
eclipse内存优化
2014-02-26 14:00 1463修改eclipse的配置文件,添加或者修改参数如下,其中XX: ... -
远程调试(二)JVM
2014-01-10 11:43 1708从J2SE 1.4.2开始,就已经提出并实现了JavaTM P ... -
JVM内存分析系列(九)JDK监控和故障处理工具
2014-01-08 18:33 1991jps JVM Process Status Tool,显示指 ... -
guava--google----用来替代commons的jar包
2014-01-06 18:21 16751Guava 是一个 Google ... -
JVM内存分析系列(八)垃圾收集器介绍及性能指标
2013-12-30 13:33 1997内存回收的具体实现。 停顿时间越短就越适合需要 ... -
JVM内存分析系列(七)垃圾收集算法
2013-12-30 12:58 1082内存回收的方法论 标记-清除算法 Mark-Sweep 分为 ... -
JVM内存分析系列(六)对象存活判断
2013-12-26 11:10 1098对象存活常用2种算法 引用计数算法 给对象中添加一个 ... -
JVM内存分析系列(五)浅谈finalize()方法
2013-12-28 18:47 1426根搜索算法中不可达对象在回收之前,要进行二次标记。 第 ... -
JVM内存分析系列(四)对象4种引用
2013-12-25 20:07 1285强引用:只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象 ... -
JVM内存分析系列(三)JVM内存模型初步
2013-12-25 17:09 1132根据《Java虚拟机规范(第二版)》的规定,结构如下 1 ...
相关推荐
在Web应用中一个常见的场景是Server端向Client端推送某些消息,要实现这项功能,按照传统的思路可以有以下可选方案: Ajax + 轮询 :这种方案仅仅是一个模拟实现,本质还是HTTP请求响应的模式,由于无法预期什么时候...
这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应 用。...
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。
该项目都是测试过了的,真实可靠,请放心使用...Spring Boot 提供了 spring-boot-starter-websocket 来快速实现消息推送,同时也可以整合流行的 RPC 框架,提供 RPC 服务接口(只要简单加入对应的 starter 组件即可)。