博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring WebSocket初探1 (Spring WebSocket入门教程)
阅读量:4072 次
发布时间:2019-05-25

本文共 3267 字,大约阅读时间需要 10 分钟。

http://www.jianshu.com/p/60799f1356c5

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

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

1. 基础环境

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

org.springframework.boot
spring-boot-starter-websocket

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

2. 相关配置

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

@Configuration@EnableWebSocketMessageBrokerpublic 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定义等等,详细用法参见
  2. SimpMessagingTemplate
    SimpMessagingTemplate是Spring-WebSocket内置的一个消息发送工具,可以将消息发送到指定的客户端。

下面我们来实现:

新建一个GreetingController

@Controllerpublic 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完毕!下一篇文章我们来写客户端功能。




转载地址:http://mkkni.baihongyu.com/

你可能感兴趣的文章
Unity Shader入门
查看>>
片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但
查看>>
UNITY自带的3D object没有三角形?
查看>>
Lambert(朗伯)光照模型 和Half Lambert的区别
查看>>
float4数据类型
查看>>
【Unity Shaders】学习笔记
查看>>
Holographic Remoting Player
查看>>
unity之LOD
查看>>
UNITY 移动到指定位置的写法
查看>>
Unity中关于作用力方式ForceMode的功能注解
查看>>
UNITY实现FLASH中的setTimeout
查看>>
HOLOLENS 扫描特效 及得出扫描结果(SurfacePlane)
查看>>
矩形旋转一定角度后,四个点的新坐标
查看>>
Unity - RectTransform详解
查看>>
UNITY和图片像素的换算
查看>>
Resources.Load加载文件返回null的原因
查看>>
Introducing Holographic Emulation
查看>>
新手!mass 设置问题
查看>>
AS3语法和UNITY C#语法的异同
查看>>
ACCELEROMETER
查看>>