文档章节

spring支持的websocket

祁达方
 祁达方
发布于 2015/08/20 10:14
字数 735
阅读 2470
收藏 8

首发:个人博客

必须说明:这篇博文只用于自己记录,使用spring的websocket支持一定要看官方文档,权威又简明,不推荐看不专业又啰嗦的国产博文。

已尝试了两种方法,当然,不管哪种方法都要先添加maven依赖:

<dependency>  
   <groupId>org.springframework</groupId>  
   <artifactId>spring-websocket</artifactId>  
</dependency>  
<dependency>  
   <groupId>org.springframework</groupId>  
   <artifactId>spring-messaging</artifactId>  
</dependency>  

<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-api</artifactId>
    <version>1.0</version>
</dependency>

 

第一种方法,对应文档中的25.2这一节:
1)声明个Handler组件:

@Component
public class MyHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        try {
            session.sendMessage(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2)在spring配置文件中配置该组件,注意要写在springmvc的配置文件中而不是spring主配置文件中:

    <!-- websocket配置1 -->
    <websocket:handlers>
        <websocket:mapping path="/myHandler" handler="myHandler"/>
    </websocket:handlers>

当然,添加这段配置之前要在xml的根节点beans节点上补充这个声明让spring认识websocket前缀:

    xmlns:websocket="http://www.springframework.org/schema/websocket"

3)这就OK了


第二种方法,对应文档中的25.4这一节:
实际是参考了官方的引导文档(一定要看),然后基于参考手册把java配置改为xml配置了。
1)在某个controller中声明:

    @MessageMapping("/say")
    @SendTo("/topic/greetings")
    public String greeting(String message) throws Exception {
        return message;
    }

2)在springmvc配置文件中添加:

    <websocket:message-broker application-destination-prefix="/app">
        <websocket:stomp-endpoint path="/hello">
            <websocket:sockjs />
        </websocket:stomp-endpoint>
        <websocket:simple-broker prefix="/topic" />
    </websocket:message-broker>

3)测试的页面太长了就不贴了,到这里找吧,在页面的中下部分。
如果懒得找就看官方提供的示例程序中测试页面

总结:
websocket的意义在让浏览器和服务器保持长连接。
在websocket之前如果想保持长连接,或者采用轮询的方法,或者采用服务器端阻塞的方法,显然都浪费性能。
如果用服务器端阻塞的话,编程中读请求(阻塞的)和写请求(由用户操作触发)也是分开的。
websocket直接就分开它们俩了,浏览器随时可以向服务器中写指令,服务器也随时可以向浏览器写指令,两者都有触发函数监听对方。
这是对无状态的http协议非常重要的补充。
html5技术很大方面就是让B/S自带富客户端编程元素,比如本地存储,长连接这些,这也是单页面程序兴起的重要原因。
真正是一个页面就是一个程序,有界面显示,有操作控件,有临时数据,有持久数据,有与服务器保持的连接。

长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博:@冷镜,QQ:908789432。


© 著作权归作者所有

共有 人打赏支持
祁达方
粉丝 11
博文 41
码字总数 51226
作品 0
大兴
程序员
私信 提问
实时通信技术之websocket

本文章即从4个方面带大家了解websocket: websocket是什么? 为什么需要 WebSocket ? websocket的优点与缺点? websocket的相关使用(客户端与服务器端)? websocket的相关协议与规范? 一...

一看就喷亏的小猿
2018/11/03
0
0
websocket:handlers 不起作用

@jack_jones 你好,想跟你请教个问题: 我在使用Spring websocket 时遇到了websocket:handlers不起作用, 其中Spring版本为4.1.6.RELEASE...

TreasureWe
2016/02/26
918
2
Spring消息之WebSocket

一、WebSocket简介 WebSocket 的定义?WebSocket是HTML5下一种全双工通信协议。在建立连接后,WebSocket服务器端和客户端都能主动的向对方发送和接收数据,就像Socket一样。 WebSocket 的由来...

jmcui
2018/05/06
0
0
spring-boot-test测试时出现不能创建bean的问题

最近使用spring-boot写项目,集成了spring-boot-starter-websocket和spring-boot-starter-test; websocket配置如下 正常运行spring-boot时websocket不报错 但是使用单元测试的时候报错 去掉w...

bithup
2018/04/08
855
1
Yeauty/netty-websocket-spring-boot-starter

netty-websocket-spring-boot-starter 中文文档 About netty-websocket-spring-boot-starter will help you develop WebSocket server by using Netty in spring-boot,it is easy to develop......

Yeauty
2018/09/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?

根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异。技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节。 作为技术...

问题终结者
34分钟前
2
0
Kubernetes Client-go Informer 源码分析

几乎所有的Controller manager 和CRD Controller 都会使用Client-go 的Informer 函数,这样通过Watch 或者Get List 可以获取对应的Object,下面我们从源码分析角度来看一下Client go Informe...

阿里云官方博客
今天
3
0
传统IDC部署网站(三)

11. 重置密码 密钥和密码都支持远程登陆, 二选一 两个都可以登陆, 密钥相对于密码来说,相对安全一点 本地登陆无法是用密钥 修改密码 root 用户 passwd root 修改普通用户 passwd usernam...

miko0089
今天
6
0
bash特性

1.支持别名 alias 2.命令替换 $(COMMANS) 或者 `COMMAND` 3. bash支持的引号: `` :命令替换 "":弱引用,可以实现变量替换 '':强引用,不实现变量替换 4.文件名通配 globbing:(man 7 glo...

忙碌的小蜜蜂
今天
3
0
以语音评测的PC端demo代码为例,讲解口语评测如何实现

本文由云+社区发表 作者:腾讯智慧教育 概述 腾讯云智聆口语评测(英文版)(Smart Oral Evaluation-English,SOE-E)是腾讯云推出的语音评测产品,是基于英语口语类教育培训场景和腾讯云的语...

腾讯云加社区
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部