- 浏览: 499106 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
SpringBootSpringSockJs 例子说明
后端代码:
前端代码:
参考(spring websocket 使用@SendToUser):http://blog.csdn.net/yingxiake/article/details/51224569
参考(Spring WebSocket教程):http://www.tuicool.com/articles/EFJvya
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
后端代码:
package com.cesmart.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.annotation.SendToUser; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) { // 在网页上可以通过"/applicationName/hello"来和服务器的WebSocket连接 // ,如:http://localhost:8090/test // setAllowedOrigins("*")表示可以跨域 // withSockJS()表示支持socktJS访问,在浏览器中使用 stompEndpointRegistry.addEndpoint("/test").setAllowedOrigins("*").withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry messageBrokerRegistry) { // 1.订阅模块定义,可以多个,如:"/topic","/uset" // 2.就是前端订阅了那个模块,当服务器要向那个模块发送信息时就从模块中取出对应的session,(session表明了是那个前端用户) // 3.就是那些前缀的URL可以 messageBrokerRegistry.enableSimpleBroker("/topicTest", "/userTest"); // ,"/user" // 这句表示客户端向服务端发送时的主题上面需要加"/app"作为前缀,如:/app/hello messageBrokerRegistry.setApplicationDestinationPrefixes("/app"); // 1.这句表示给指定用户发送(一对一)的主题前缀,如“'/user/'+userid + '/otherMessage'” // 2.如果要使用@SendToUser,就不能设置这个,里面会自动实现一套方法,是在@SendToUser的URL前加“user+sessionId"组成 messageBrokerRegistry.setUserDestinationPrefix("/userTest"); } }
package com.cesmart.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.messaging.simp.annotation.SendToUser; import org.springframework.web.bind.annotation.RestController; @RestController public class WebTest { @Autowired private SimpMessagingTemplate simpMessagingTemplate; // 表示服务端接收客户端通过主题“/app/hello”发送过来的消息(服务端接收消息接口) @MessageMapping("/hello") // 表示这个函数执行完成后会广播结果到"/topicTest/sayHello"这个主题,前端如果订阅了这个主题就会收到这个信息, // 相当于simpMessagingTemplate.convertAndSend("/topicTest/sayHello", // "sayHello"); @SendTo("/topicTest/sayHello") public String greeting(String msg) throws Exception { System.out.println("greeting == " + msg); // simpMessagingTemplate.convertAndSend("/topicTest/sayHello", // "sayHello"); msg = msg + "表示服务端接收客户端通过主题"; return msg; } // 表示服务端接收客户端通过主题“/app/hello”发送过来的消息(服务端接收消息接口) @MessageMapping("/hello2") // 表示这个函数执行完成后会广播结果到"/topicTest/sayHello"这个主题,前端如果订阅了这个主题就会收到这个信息, // 相当于simpMessagingTemplate.convertAndSend("/topicTest/sayHello", // "sayHello"); // @SendToUser("/topicTest/sayHello2/otherMessage") // 相当于simpMessagingTemplate.convertAndSendToUser(user, "/otherMessage", " // ==SendToUser推送给单一用户2=="); public String greeting2(String msg) throws Exception { System.out.println("greeting2 == " + msg); String user = msg; simpMessagingTemplate.convertAndSendToUser(user, "/otherMessage", "==SendToUser推送给单一用户2=="); return msg; } // 表示服务端接收客户端通过主题“/app/hello”发送过来的消息(服务端接收消息接口) @MessageMapping("/hello3") // 表示这个函数执行完成后会广播结果到"/topicTest/sayHello"这个主题,前端如果订阅了这个主题就会收到这个信息, // 相当于simpMessagingTemplate.convertAndSend("/topicTest/sayHello", // "sayHello"); @SendToUser("/userTest/sayHello3") // 相当于simpMessagingTemplate.convertAndSendToUser(user, "/otherMessage", " // ==SendToUser推送给单一用户2=="); public String greeting3(String msg) throws Exception { System.out.println("greeting3 == " + msg); String user = msg; msg = msg + " ==SendToUser推送给单一用户3=="; return msg; } }
package com.cesmart; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.ComponentScan; @EnableAutoConfiguration @ComponentScan(basePackages = "com.cesmart") // 扫描那些包得到bean.@ComponentScan({"com.teradata.notification","com.teradata.dal"}) public class Application { public static void main(String[] args) { ApplicationContext applicationContext = SpringApplication.run(Application.class, args); } }
前端代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="http://121.43.38.142/webSocket/jquery-1.11.3.min.js"></script> <script type="text/javascript" src="//cdn.bootcss.com/sockjs-client/1.1.1/sockjs.min.js"></script> <script src="//cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script> <script type="text/javascript"> function connect() { var socket = new SockJS('http://localhost:8090/test'); var userid = document.getElementById('userId').value; stompClient = Stomp.over(socket); stompClient.connect('', '', function (frame) { console.log('Connected: ' + frame); stompClient.subscribe('/topicTest/sayHello', function(message) { console.log('message == ' + message.body); //alert(message.body); }); stompClient.subscribe('/userTest/'+userid + '/otherMessage', function(message) { console.log('sayHello2 message == ' + message.body); }); stompClient.subscribe('/user/userTest/sayHello3', function(message) { console.log('sayHello3 message == ' + message.body); }); }); } function disconnect() { if (stompClient != null) { stompClient.disconnect(); } setConnected(false); console.log("Disconnected"); } function sendName() { console.log("sendName"); var name = document.getElementById('message').value; stompClient.send("/app/hello", {}, "sendName"); console.log("sendName2"); } function sendName2() { console.log("sendName"); var userid = document.getElementById('userId').value; var name = document.getElementById('message').value; stompClient.send("/app/hello2", {}, userid); console.log("sendName2"); } function sendName3() { console.log("sendName"); var userid = document.getElementById('userId').value; var name = document.getElementById('message').value; stompClient.send("/app/hello3", {}, userid); console.log("sendName3"); } </script> </head> <body> <div> <button id="connect" onclick="connect()">连接</button> <button id="disconnect" onclick="disconnect()">断开连接</button> <button id="send" onclick="sendName()">发送消息</button> <button id="send2" onclick="sendName2()">发送消息2</button> <button id="send3" onclick="sendName3()">发送消息3</button> <button id="reconnect" onclick="reconnect()">重新连接</button> </div> <div> <textarea id="message" style="width: 350px">Here is a message!</textarea> </div> <div> <textarea id="userId" style="width: 350px">123456789</textarea> </div> <div>日志信息:</div> <p id="console" width="600px"></p> </body> </html>
参考(spring websocket 使用@SendToUser):http://blog.csdn.net/yingxiake/article/details/51224569
参考(Spring WebSocket教程):http://www.tuicool.com/articles/EFJvya
相关推荐
毕设和企业适用springboot企业数据管理平台类及跨境电商管理平台源码+论文+视频
功能说明: 环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc。。。
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot社交应用平台类及用户数据分析平台源码+论文+视频
大米外贸商城系统 简称damishop 完全开源版,只需做一种语言一键开启全球133中语言自动翻译功能,价格实现自动汇率转换,集成微信支付宝 paypal以及国外主流支付方式,自带文章博客系统。 软件架构 基于MVC+语言包模式,增加控制台,API导入产品方便对接其他系统(带json示例数据)。 使用要求 PHP7.4+ MYSQL5.6+ REDIS(可选) 安装方法 composer install 打开安装向导安装 http://您的域名/install 特色 1、缓存层增加时间与批量like删除 2、API产品导入方便对接其他系统 3、增加控制台命令行,命令行生成语言翻译包 4、后台一键开启自动翻译模式,支持全球133中语言,由于google代理翻译需要收费,这个功能需要付费。 5、可选购物车与ajax修改购物车产品 6、一键结算checkout 7、增加网站前台自定义路由 方便seo 更新日志 v3.9.7 集成鱼码支付接口,方便个人站长即使收款到账使用 v3.9.3 更新内容 1:增加ueditor与旧编辑器切换 2:增加可视化布局插
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot生鲜鲜花类及生物识别平台源码+论文+视频.zip
毕设和企业适用springboot企业健康管理平台类及视觉识别平台源码+论文+视频.zip
毕设和企业适用springboot视频编辑类及餐饮管理平台源码+论文+视频.zip
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot社区物业类及智能仓储平台源码+论文+视频
毕设和企业适用springboot企业知识管理平台类及人工智能医疗平台源码+论文+视频
毕设和企业适用springboot汽车电商类及新闻传播平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及全渠道电商平台源码+论文+视频.zip
毕设和企业适用springboot企业数据智能分析平台类及投票平台源码+论文+视频
毕设和企业适用springboot全渠道电商平台类及人工智能客服平台源码+论文+视频
毕设和企业适用springboot企业云存储平台类及AI数据标注平台源码+论文+视频
毕设和企业适用springboot人工智能客服系统类及旅游规划平台源码+论文+视频
毕设和企业适用springboot社交电商类及环境监控平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及大数据存储平台源码+论文+视频