博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot2.x集成WebSocket
阅读量:4682 次
发布时间:2019-06-09

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

WebSocket 不做过多得介绍,这里有篇比较全面得文章      

我这里是精简版,只挑出核心代码记录。免得浪费大家时间

⒈项目导入依赖

1         
2
3
org.springframework.boot
4
spring-boot-starter-websocket
5

⒉编写websocket配置

1 package cn.coreqi.consumer.config; 2  3 import org.springframework.context.annotation.Configuration; 4 import org.springframework.messaging.simp.config.MessageBrokerRegistry; 5 import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; 6 import org.springframework.web.socket.config.annotation.StompEndpointRegistry; 7 import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; 8  9 /**10  * 配置消息代理,默认情况下使用内置的消息代理。11  * @EnableWebSocketMessageBroker 此注解表示使用STOMP协议来传输基于消息代理的消息,此时可以在@Controller类中使用@MessageMapping12  */13 @Configuration14 @EnableWebSocketMessageBroker15 //SpringBoot2.x将extends AbstractWebSocketMessageBrokerConfigurer改为 implements WebSocketMessageBrokerConfigurer16 public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {17     /**18      * 注册 Stomp的端点 配置对外暴露访问的端点19      * @param registry20      */21     @Override22     public void registerStompEndpoints(StompEndpointRegistry registry) {23         registry.addEndpoint("/websocket-simple")   //添加STOMP协议的端点。24                 // 这个URL是供WebSocket客户端或SockJS客户端连接服务端访问的地址。25                 .setAllowedOrigins("*") //添加允许跨域访问26                 .withSockJS();  //指定端点使用SockJS协议27     }28 29     /**30      * 配置消息代理31      * @param registry32      */33     @Override34     public void configureMessageBroker(MessageBrokerRegistry registry) {35         //启动简单Broker,客户端请求地址符合配置的前缀,消息才会发送到这个broker36         //客户端订阅当前服务端时需要添加以下请求前缀,topic一般用于广播推送,queue用于点对点推送37         registry.enableSimpleBroker("/userTest","/topicTest");38         //如果不设置下面这一句,使用SimpMessagingTemplate.convertAndSendToUser向指定用户推送消息时39         //订阅前缀只能为/user,例如前端订阅为/user/fanqi/info40         registry.setUserDestinationPrefix("/userTest");41         //客户端(html客户端、java客户端等)向服务端发送消息的请求前缀42         registry.setApplicationDestinationPrefixes("/app");43     }44 45 }

⒊编写控制器

1 package cn.coreqi.consumer.controller; 2  3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.messaging.handler.annotation.MessageMapping; 5 import org.springframework.messaging.handler.annotation.SendTo; 6 import org.springframework.messaging.simp.SimpMessagingTemplate; 7 import org.springframework.scheduling.annotation.EnableScheduling; 8 import org.springframework.scheduling.annotation.Scheduled; 9 import org.springframework.stereotype.Controller;10 import org.springframework.web.bind.annotation.RequestMapping;11 12 import java.text.DateFormat;13 import java.text.SimpleDateFormat;14 import java.util.Date;15 16 @Controller17 @EnableScheduling   //定时任务支持18 public class WebSocketController {19 20     @Autowired21     private SimpMessagingTemplate messagingTemplate;22 23 24     @RequestMapping("/")25     public String index() {26         return "index";27     }28 29     /**30      * 这里用于客户端推送消息到服务端,推送地址为:setApplicationDestinationPrefixes("/app")设置得前缀加上@MessageMapping注解得地址31      * 此处为/app/send32      * 当前方法处理后将结果转发给@SendTo注解得地址,如果没有指定,则采用默认33      * @MessageMapping 指定要接收消息的地址,类似@RequestMapping。除了注解到方法上,也可以注解到类上34      * @SendTo 默认消息将被发送到与传入消息相同的目的地,但是目的地前面附加前缀(默认情况下为"/topic")35      * @param message 客户端推送过来得消息,一般生产环境会封装36      * @return37      * @throws Exception38      */39     @MessageMapping("/send")40     @SendTo("/topicTest/web-to-server-to-web")41     public String greeting(String message) throws Exception {42         // 模拟延时,以便测试客户端是否在异步工作43         Thread.sleep(1000);44         return "Hello, " + message + "!";45     }46 47     /**48      * 最基本的服务器端主动推送消息给客户端49      * @return50      * @throws Exception51      */52     @Scheduled(initialDelay = 7000,fixedRate = 2000)53     public String serverTime() throws Exception {54         // 发现消息55         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");56         messagingTemplate.convertAndSend("/topicTest/servertime", df.format(new Date()));57         return "servertime";58     }59 60     /**61      * 服务端推送消息到指定用户得客户端62      * 例如以下将会推送到63      * 因为设置了setUserDestinationPrefix("/userTest"),因此推送到/userTest/fanqi/info64      * 如果没有设置setUserDestinationPrefix(),则默认前端为user,将会推送到/user/fanqi/info65      * 客户端订阅/userTest/fanqi/info将会收到服务端推送得消息66      * @return67      * @throws Exception68      */69     @Scheduled(initialDelay = 7000,fixedRate = 2000)70     public String serverTimeToUser() throws Exception {71         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");72         messagingTemplate.convertAndSendToUser("fanqi","/info", df.format(new Date()));73         return "serverTimeToUser";74     }75 }

⒋前端websocket客户端代码

1   2   3   4     玩转spring boot——websocket  5       6       7       8       9      65  66  67  68 

websocket示例

69 70 71 72
73
74
75

以下是websocket的服务端主动推送消息到页面的例子

76
77
78
79

以下是websocket的服务端主动推送消息到页面的例子,只有hzb这个用户收到

80
81
82
83

以下是websocket的客户端发消息到服务端,服务端再将该消息返回到客户端(页面)的例子

84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
消息内容:
{
{messageContent}}
99
100 101

 

转载于:https://www.cnblogs.com/fanqisoft/p/11276335.html

你可能感兴趣的文章
微信小程序获取用户信息解密AES并且注意如何获取unionid
查看>>
JavaScript设计模式----1
查看>>
Qt实现半透明遮罩效果
查看>>
erlang调优方法
查看>>
Mysql linux -N命令
查看>>
daily scrum 12.5
查看>>
linux-ftp install
查看>>
NetXray
查看>>
局域网基本工作原理
查看>>
让历史告诉我们未来
查看>>
UVa540 Team Queue
查看>>
android 练习之路 (八)
查看>>
tp5 中 model 的聚合查询
查看>>
android wear开发之:增加可穿戴设备功能到通知中 - Adding Wearable Features to Notifications...
查看>>
压缩文件函数库(转载)
查看>>
【转】ubuntu12.04没有/var/log/messages解决
查看>>
Oracle EBS 初始化用户密码
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
函数的复写
查看>>