websocket(一)--握手
最近在琢磨怎么实现服务端的消息推送,因为以前都是通过客户端请求来获取信息的,如果需要实时信息就得轮询,比如通过ajax不停的请求。
websocket相当于对HTTP协议进行了升级,客户端和服务端通过websocket协议握手成功后,两者之间建立一个数据通道(长连接,双通道),以此来传输数据,而不必每次都由客户端发起请求。
这篇文章先来通过代码来介绍怎样实现“握手”,消息推送在后边的文章中写。
注意:1.JavaEE版本为7.0
2.tomcat版本为8.0
3.不需要额外导入其他的jar包
由于websocket不支持低版本的javaEE和tomcat,所以必须符合上述条件,我是在Myeclipse2014 的IDE中进行编码的,该IDE支持javaEE7.0
WebSocketServer .java
package socket;
import java.io.IOException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/socket")
public class WebSocketServer {
@OnMessage
public void onMessage(String message, Session session)
throws IOException, InterruptedException {
//输出客户端发来的信息
System.out.println("Received: " + message);
// 向客户端发送信息
session.getBasicRemote().sendText("This is message from server");
}
@OnOpen
public void onOpen () {
System.out.println("Client connected");
}
@OnClose
public void onClose () {
System.out.println("Connection closed");
}
}
使用@ServerEndpoint注解后该类就类似一个servlet了。包含的方法如上。这部分代码即服务端代码。
下面的客户端代码:
socketClient.html
Testing websockets
<div id="messages"></div>
<script type="text/javascript">
/* 申请一个WebSocket对象,参数是需要连接的服务器端的地址 */
var webSocket = new WebSocket('ws://localhost:8080/websockettest/socket');
/* 如果出现连接,处理,接收,发送数据失败的时候就会触发onerror事件 */
webSocket.onerror = function(event) {
onError(event)
};
/* 当websocket创建成功时,即会触发onopen事件 */
webSocket.onopen = function(event) {
onOpen(event)
};
/* 当客户端收到服务端发来的消息时,会触发onmessage事件,参数evt.data中包含server传输过来的数据 */
webSocket.onmessage = function(event) {
onMessage(event)
};
/* 当客户端收到服务端发送的关闭连接的请求时,触发onclose事件 */
webSocket.onclose = function(event) {
onMessage(event)
};
function onMessage(event) {
alert("message:"+event.data);
}
function onOpen(event) {
alert("open success");
webSocket.send('hello');
}
function onClose(event) {
alert("closed");
}
function onError(event) {
alert("error");
}
</script>
以上就是实现客户端与服务端握手的实例。
版权声明:本文为博主原创文章,未经博主允许不得转载。
websocket(一)--握手的更多相关文章
- webSocket浏览器握手不成功(解决)
websocket与服务端握手会报握手不成功的错误解决方法: 首先是服务端首次收到请求要回报给客户端的报文要做处理多的不说,方法敬上: /// <summary> /// 打包请求连接数据 ...
- websocket协议握手详解
最近使用tornado做长链接想着怎么着也要试试websocket协议吧.所以说干就干. 首先要知道websocket是基于http协议的,为什么这么说?因为从协议来说,websocket是借用了一部 ...
- websocket服务器握手协议
测试网页代码如下 <!DOCTYPE html> <html> <head> <title>测试 websocket 世界最简单案例</title ...
- node.js 使用 net 模块模拟 websocket 握手,进行数据传递。
websocket 是一种让浏览器与服务器之间建立持久的连接,并能进行双向数据传输的一种协议. websocket 属性应用层协议,基于tcp传输协议,并复用http的握手通道. 一.如何进行webs ...
- WebSocket - ( 一.概述 )
说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...
- Netty 实现 WebSocket 聊天功能
上一次我们用Netty快速实现了一个 Java 聊天程序(见http://www.waylau.com/netty-chat/).现在,我们要做下修改,加入 WebSocket 的支持,使它可以在浏览 ...
- websocket与socket.io
什么是Websocket? Websocket是一个独立于http的实时通信协议,最初是在HTML5中被引用进来的,在HTML5规范中作为浏览器与服务器的核心通信技术被嵌入到浏览器中.WebSocke ...
- WebSocket介绍和一个简单的聊天室
WebSocket是什么呢? WebSocket一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并被RFC7936所补充规范, ...
- html websocket
from:http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/ websocket 规范升级过,在该链接的文章内未提及,后面 ...
随机推荐
- ActiveMQ系列之四:用ActiveMQ构建应用
Broker:相当于一个ActiveMQ服务器实例 命令行启动参数示例如下: 1:activemq start :使用默认的activemq.xml来启动 2:activemq start xbean ...
- Hadoop基本知识,(以及MR编程原理)
hadoop核心是:MapReduce和HDFS (对应着job执行(程序)和文件存储系统(数据的输入和输出)) CRC32作数据交验:在文件Block写入的时候除了写入数据还会写入交验信息,在读取 ...
- HashMap是无序的
一. 说明 HashMap是基于哈希表Map的实现.设计初衷主要是为了解决键值(key-value)对应关联的,HashMap的优势是可以很快的根据键(key)找到该键对应的值(value),但是我们 ...
- Linux 系统应用编程——标准I/O
标准I/O的由来 标准I/O指的是ANSI C 中定义的用于I/O操作的一系列函数. 只要操作系统安装了C库,标准I/O函数就可以调用.换句话说,如果程序中使用的是标准I/O函数,那么 ...
- MacRuby 0.3发布,支持Interface Builder,和创建GUI用的HotCocoa
作者 Werner Schuster ,译者 贾晓楠 发布于 2008年9月24日 | 分享到: 微博 微信 QQ空间 LinkedIn Facebook 邮件分享 稍后阅读 我的阅读清单 现在,Ma ...
- permutations II(全排列 2)
题目要求 Given a collection of numbers that might contain duplicates, return all possible unique permuta ...
- 企业级web负载均衡完美架构
转载:揭秘企业级web负载均衡完美架构(图) 2010-07-06 15:16 抚琴煮酒 51CTO.com 字号:T | T 相信很多朋友对企业级的负载均衡高可用实例非常感兴趣,此篇文章根据成熟的线 ...
- 6.3 Query 语句对系统性能的影响
我们重点分析实现同样功能的不同SQL 语句在性能方面会产生较大的差异的根本原因,并通过一个较为典型的示例来对我们的分析做出相应的验证. 为什么返回完全相同结果集的不同SQL 语句,在执行性能方面存在差 ...
- python常见模块之time,datetime模块
一.time模块 time模块提供了一些用于管理时间和日期. time模块中时间的表现形式有三种: format_string 格式化的字符串 struct_time 结构化时间 times ...
- Spring Boot开发MongoDB应用实践
本文继续上一篇定时任务中提到的邮件服务,简单讲解Spring Boot中如何使用MongoDB进行应用开发. 上文中提到的这个简易邮件系统大致设计思路如下: 1.发送邮件支持同步和异步发送两种 2.邮 ...