Spring WebSocket初探1 (Spring WebSocket入门教程)<转>

See more: Spring WebSocket reference
整个例子属于WiseMenuFrameWork的一部分,可以将整个项目Clone下来,如果朋友们有需求,我可以整理一个独立的demo出来。

WebSocket是html5带来的一项重大的特性,使得浏览器与服务端之间真正长连接交互成为了可能,这篇文章会带领大家窥探一下Spring 对WebSocket的支持及使用。

1. 基础环境

快速搭建Spring框架,我们使用Spring boot,这里先不讨论SpringBoot,只知道它是一个“快速搭建Spring项目的一站式解决方案”就OK了。
要使用Spring的WebSocket功能,我们需要添加依赖:

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

这样就轻松开启了WebSocket基础功能。

2. 相关配置

下面我们来配置WebSocket。
首先新增一个WebSocketConfig类,定义全局的配置信息,使用JavaConfig的形式:
WebSocketConfig.java

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/socket").withSockJS();
    }
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }
}

相关说明:

  1. registerStompEndpoints(StompEndpointRegistry registry)
    这个方法的作用是添加一个服务端点,来接收客户端的连接。

    • registry.addEndpoint("/socket")表示添加了一个/socket端点,客户端就可以通过这个端点来进行连接。
    • withSockJS()的作用是开启SockJS支持,
  2. configureMessageBroker(MessageBrokerRegistry config)
    这个方法的作用是定义消息代理,通俗一点讲就是设置消息连接请求的各种规范信息。
    • registry.enableSimpleBroker("/topic")表示客户端订阅地址的前缀信息,也就是客户端接收服务端消息的地址的前缀信息(比较绕,看完整个例子,大概就能明白了)
    • registry.setApplicationDestinationPrefixes("/app")指服务端接收地址的前缀,意思就是说客户端给服务端发消息的地址的前缀

      上面两个方法定义的信息其实是相反的,一个定义了客户端接收的地址前缀,一个定义了客户端发送地址的前缀

到目前为止,整个框架的配置信息已经完成,下面我们来写一个发送公告的例子,展示一下WebSocket的魅力!

3. 编写后台业务

有了上述的基本配置信息,我们就可以编写基本功能了。这里先简单说明两个知识点:

  1. MessageMapping
    Spring对于WebSocket封装的特别简单,提供了一个@MessageMapping注解,功能类似@RequestMapping,它是存在于Controller中的,定义一个消息的基本请求,功能也跟@RequestMapping类似,包括支持通配符``的url定义等等,详细用法参见Annotation Message Handling
  2. SimpMessagingTemplate
    SimpMessagingTemplate是Spring-WebSocket内置的一个消息发送工具,可以将消息发送到指定的客户端。

下面我们来实现:

新建一个GreetingController

@Controller
public class GreetingController {
    @Resource
    private SimpMessagingTemplate simpMessagingTemplate;
    @RequestMapping("/helloSocket")
    public String index(){
        return "/hello/index";
    }
    @MessageMapping("/change-notice")
    public void greeting(String value){
        this.simpMessagingTemplate.convertAndSend("/topic/notice", value);
    }
}

相关说明:

  1. index()
    指定了一个页面,用来实现WebSocket客户端发送公告功能,使用的是@RequestMapping,所以接收的是http请求,进行页面跳转。
  2. greeting(String value)
    这个方法是接收客户端发送功公告的WebSocket请求,使用的是@MessageMapping
  3. this.simpMessagingTemplate.convertAndSend("/topic/notice", value)
    这个方法官方给出的解释是Convert the given Object to serialized form, possibly using a MessageConverter, wrap it as a message and send it to the given destination. 意思就是“将给定的对象进行序列化,使用‘MessageConverter’进行包装转化成一条消息,发送到指定的目标”,通俗点讲就是我们使用这个方法进行消息的转发发送!

前面我们全局配置中指定了服务端接收的连接以 app大头,所以客户端发送公告的请求连接应该是/app/change-notice
服务端代码就这么简单,跟写SpringMVC类似,同样上面的geeting(String value)方法我们还可以使用另一个注解@SendTo换成另一种写法。

@MessageMapping("/change-notice")
@SendTo("/topic/notice")
public String greeting(String value) {
    return value;
}

相关说明:
改进后的代码更简单,着重理解一下@SendTo

  • @SendTo定义了消息的目的地。结合例子解释就是“接收/app/change-notice发来的value,然后将value转发到/topic/notice客户端。
  • /topic/notice是客户端发起连接后,订阅服务端消息时指定的一个地址,用于接收服务端的返回,后面我们在写客户端代码的时候会看见。

到目前为止,服务端代码Coding完毕!下一篇文章我们来写客户端功能。

文/Devid(简书作者)
原文链接:http://www.jianshu.com/p/60799f1356c5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-29 19:08:29

Spring WebSocket初探1 (Spring WebSocket入门教程)<转>的相关文章

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 Cloud 入门教程(五): Ribbon实现客户端的负载均衡

接上节,假如我们的Hello world服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改为8763.然后启动这两个Spring Boot应用, 就可以得到两个Hello World服务.这两个Hello world都注册到了eureka服务中心.这时候再访问http://localhost:8761, 可以看到两个hello world服务已经注册.(服务与注册参见Spr

Spring Cloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard

1. Hystrix Dashboard (断路器:hystrix 仪表盘)  Hystrix一个很重要的功能是,可以通过HystrixCommand收集相关数据指标. Hystrix Dashboard可以很高效的现实每个断路器的健康状况. 1). 在Ribbon服务g和Feign服务的Maven工程的pom.xml中都加入依赖 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <art

Spring Cloud 入门教程(三): 配置自动刷新

之前讲的配置管理, 只有在应用启动时会读取到GIT的内容, 之后只要应用不重启,GIT中文件的修改,应用无法感知, 即使重启Config Server也不行. 比如上一单元(Spring Cloud 入门教程(二): 配置管理)中的Hello World 应用,手动更新GIT中配置文件config-client-dev.properties的内容(别忘了用GIT push到服务器) hello=Hello World from GIT version 1 刷新 http://locahost/8

Spring Cloud 入门教程(二): 配置管理

使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用.随着应用程序通过从开发人员到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切.服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具.很容易添加

Spring Cloud 入门教程(一): 服务注册

1.  什么是Spring Cloud? Spring提供了一系列工具,可以帮助开发人员迅速搭建分布式系统中的公共组件(比如:配置管理,服务发现,链路开关,智能路由,微代理,控制总线,一次性令牌,全局锁,主节点选举, 分布式session, 集群状态).协调分布式环境中各个系统,为各类服务提供模板性配置.使用Spring Cloud, 开发人员可以搭建实现了这些样板的应用,并且在任何分布式环境下都能工作得非常好,小到笔记本电脑, 大到数据中心和云平台. Spring Cloud官网的定义比较抽象

Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis

https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=63 https://www.zhihu.com/question/29444491/answer/146457757 1. Java - Struts框架教程Struts 是Apache软件基金会(ASF)赞助的一个开源项目.通过采用JavaServlet/JSP技术,实现了基于Java EEWeb

Spring MVC注解配置结合Hibernate的入门教程及其代码实例

原文:Spring MVC注解配置结合Hibernate的入门教程及其代码实例 源代码下载地址:http://www.zuidaima.com/share/1787210045197312.htm 1.概述 本文旨在搭建Spring MVC+Hibernate开发框架,通过一个简单的demo讲解Spring MVC的相关配置文件,以及通过注解方式实现简单功能. 开发框架:Spring+Spring MVC+Hibernate(Spring所用的版本为3.0.5). 数据库:MySQL(数据库名称

Spring Security 3.x 完整入门教程

Spring Security 3.x 出来一段时间了,跟Acegi是大不同了,与2.x的版本也有一些小小的区别,网上有一些文档,也有人翻译Spring Security 3.x的guide,但通过阅读guide,无法马上就能很容易的实现一个完整的实例. 我花了点儿时间,根据以前的实战经验,整理了一份完整的入门教程,供需要的朋友们参考. 1,建一个web project,并导入所有需要的lib,这步就不多讲了. 2,配置web.xml,使用Spring的机制装载: <?xml version=&qu