学习WebSocket(一):Spring WebSocket的简单使用

1、什么是websocket?

  WebSocket协议定义了一种web应用的新功能,它实现了服务器端和客户端的全双工通信。全双工通信即通信的双方可以同时发送和接收信息 的信息交互方式。它是继Java applets, XMLHttpRequest, Adobe Flash, ActiveXObject等使web应用更具交互性的新技术。

  在实现连线过程中,浏览器和服务器通过TCP三次握手建立连接。 如果和服务器连接成功后,浏览器通过HTTP发送握手请求,如果服务器同意握手连接,客户端和服务端之后就能互相之间发送信息。HTTP只用于开始的握手,一旦成功建立握手连接,HTTP不会参与数据传输,使用TCP连接来传输数据。

2、以往和服务器交互的几种方式

  长轮询

  长轮询就是客户端按照一个固定的时间定期向服务器发送请求,通常这个时间间隔的长度受到服务端的更新频率和客户端处理更新数据时间的影响。这种方式缺点很明显,就是浏览器要不断发请求到服务器以获取最新信息,造成服务器压力过大,占用宽带资源。

  使用streaming AJAX

  streaming ajax是一种通过ajax实现的长连接维持机制。主要目的就是在数据传输过程中对返回的数据进行读取,并且不会关闭连接。

  iframe的方式

  iframe可以在页面中嵌套一个子页面,通过将iframe的src指向一个长连接的请求地址,服务端就能不断往客户端传输数据。

3、什么时候用websocket?

  最适合websocket的web应用的就是那些客户端和服务器端需要高频繁、低延迟交换信息的应用。

4、如何使用websocket?

  Spring提供了一个是适应于各种websocket引擎的websocket api,例如是Tomcat (7.0.47+)和GlassFish (4.0+),也适应于支持原生websocket的Jetty (9.0+)。而不同的浏览器对websocket的支持程度也有所不同,如果浏览器websocket不支持,那么可以用SocketJs代替websocket。

  创建和配置WebSocketHandler

  WebSocketHandler用于处理websocket的消息。

public class MyHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {    session.sendMessage(message);
    }

}

  创建和配置HandshakeInterceptor

  HandshakeInterceptor用于处理握手前后的预处理工作。

public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) {
        System.out.println("After Handshake");
        super.afterHandshake(request, response, wsHandler, ex);
    }

    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,Map<String, Object> attributes) throws Exception {
        System.out.println("Before Handshake");     return super.beforeHandshake(request, response, wsHandler, attributes);
    }
}

  同时配置spring-websocket.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:websocket="http://www.springframework.org/schema/websocket"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/websocket
        http://www.springframework.org/schema/websocket/spring-websocket.xsd">

    <websocket:handlers>
        <websocket:mapping handler="myHandler" path="/myHandler"/>
        <websocket:handshake-interceptors>
            <bean class="org.springframework.samples.HandshakeInterceptor"></bean>
        </websocket:handshake-interceptors>
    </websocket:handlers> 

    <bean id="myHandler" class="org.springframework.samples.MyHandler"></bean>

</beans>

  在页面上添加JavaScript

<script type="text/javascript">  //websocket-demo是project name
    var url = ‘ws://‘ + window.location.host + ‘/websocket-demo/myHandler‘;
    var sock = new WebSocket(url);
    sock.onopen = function() {
        console.log(‘Opening‘);
        sayHello();
    };
    sock.onmessage = function(e) {
        alert(‘Received message: ‘+ e.data);
    };
    sock.onclose = function() {
        console.log(‘Closing‘);
    };
    function sayHello() {
        console.log(‘Sending Hello!‘);
        sock.send("Hello!");
    }
</script>

需要注意的地方:

1、应用服务器的版本,如果版本过低是不支持websocket的

2、JavaScript的websocket的url应该和spring-websocket.xml的<websocket:mapping path="">一致

时间: 2024-08-01 20:13:42

学习WebSocket(一):Spring WebSocket的简单使用的相关文章

Spring WebSocket简单入门测试Demo(网页及时聊天)

说明 本demo运行的环境是:ssm框架 + tomcat8 + jdk7+,由于只是demo.很简陋.能运行调式通过就行,再在此基础上进行扩展研究. 在网上看了很多列子.对于没有接触过websocket的人来说.真的是看不懂.本文列子应该算是比较简单的. Spring WebSocket API的核心接口是WebSocketHandler.我把它叫做消息处理中心. 其他的详细解说可以参考别人的博客 <servlet-mapping> <servlet-name>springmvc

spring websocket集群问题的简单记录

[TOC] 前言 最近公司里遇到一个问题,在集群中一些websocket的消息丢失了. 产生问题的原理很简单,发送消息的服务和接收者连接的服务不是同一个服务. 解决方案 用中间件(mq, redis etc.)来在服务之间进行通信. 不直接发送websocket消息,而是将消息放在mq或者redis的list中. 并在redis中维护连接信息,服务根据连接信息来判断自己是否需要处理消息,或者将消息发给接收者连接的服务. 代码示例 我们的项目中使用的是Spring WebSocket,并且使用了S

(转)Spring WebSocket教程

学习背景 很久以前就知道WebSocket,但那时不论是浏览器还是开发技术对它的支持都还很少.但是,Spring4突然发布,让我眼前一亮,Spring4直接支持WebSocket. 对于Spring我还是很喜欢的,它让Java Web开发相当的有艺术感,这次支持的WebSocket又特别的和我的胃口,所以马上就去学习了. 前提 本文的内容,是建立在懂J2EE编程,使用过Spring,听说过WebSocket上的,如果前面的3点大家不太明白,可以先去补补知识. WebSocket还不是很普遍,对服

学习WebSocket一(WebSocket初识)

Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tomcat从7.0.47开始支持JSR356,这样一来写WebSocket的时候,所用的代码都是可以一样的.今天终于体验了一把Tomcat发布的WebSocket,用着很爽,下面把这一历程分享给大家. 关键词:WebSocket, Tomcat 前提:使用Tomcat7.0.47,Firefox25.0.0.5046 首先Tomcat7.0.47自带WebSocket的示例程序,有两种版本,

Spring WebSocket初探1 (Spring WebSocket入门教程)&lt;转&gt;

See more: Spring WebSocket reference整个例子属于WiseMenuFrameWork的一部分,可以将整个项目Clone下来,如果朋友们有需求,我可以整理一个独立的demo出来. WebSocket是html5带来的一项重大的特性,使得浏览器与服务端之间真正长连接交互成为了可能,这篇文章会带领大家窥探一下Spring 对WebSocket的支持及使用. 1. 基础环境 快速搭建Spring框架,我们使用Spring boot,这里先不讨论SpringBoot,只知

Spring WebSocket初探2 (Spring WebSocket入门教程)&lt;转&gt;

See more: Spring WebSocket reference整个例子属于WiseMenuFrameWork的一部分,可以将整个项目Clone下来,如果朋友们有需求,我可以整理一个独立的demo出来. 接上一篇:Spring WebSocket初探1 (Spring WebSocket入门教程) WebSocket前端准备 前端我们需要用到两个js文件:sockjs.js和stomp.js SockJS:SockJS 是一个浏览器上运行的 JavaScript 库,如果浏览器不支持 W

Spring WebSocket教程(二)

实现目标 这一篇文章,就要直接实现聊天的功能,并且,在聊天功能的基础上,再实现缓存一定聊天记录的功能. 第一步:聊天实现原理 首先,需要明确我们的需求.通常,网页上的聊天,都是聊天室的形式,所以,这个例子也就有了一个聊天的空间的概念,只要在这个空间内,就能够一起聊天.其次,每个人都能够发言,并且被其他的人看到,所以,每个人都会将自己所要说的内容发送到后台,后台转发给每一个人. 在客户端,可以用Socket很容易的实现:而在web端,以前都是通过轮询来实现的,但是WebSocket出现之后,就可以

Spring WebSocket详解

Spring WebSocket详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Spring框架从4.0版开始支持WebSocket,下面我将详述Spring WebSocket库的相关内容.内容包括Spring框架是如何在Web应用中支持WebSocket方式的消息通信,以及如何利用STOMP协议作为应用层的协议--WebSocket的子协议. 1.WebSocket协议介绍 WebSocket协议是RFC-6455规范定义的一个Web领域的

Spring WebSocket教程(一)

学习背景 很久以前就知道WebSocket,但那时不论是浏览器还是开发技术对它的支持都还很少.但是,Spring4突然发布,让我眼前一亮,Spring4直接支持WebSocket. 对于Spring我还是很喜欢的,它让Java Web开发相当的有艺术感,这次支持的WebSocket又特别的和我的胃口,所以马上就去学习了. 前提 本文的内容,是建立在懂J2EE编程,使用过Spring,听说过WebSocket上的,如果前面的3点大家不太明白,可以先去补补知识. WebSocket还不是很普遍,对服