基于Spring mvc 的Websocket 开发
1、Pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
2、Spring-servlet,xml
<context:component-scan base-package="com.websocket"/>
3、WebSocketConfig.java
package com.websocket; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; /**
* Created by HendSame on 11/29/16.
*/
@Configuration
@EnableWebMvc
@EnableWebSocket
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
//允许连接的域,只能以http或https开头
String[] allowsOrigins = {"*"}; //WebIM WebSocket通道
registry.addHandler(allBedWebSocketHandler(),"/websocket/get/all/data/rt").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());
registry.addHandler(allBedWebSocketHandler(), "/sockjs/websocket/get/all/data/rt").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); registry.addHandler(bedWebSocketHandler(),"/websocket/get/by/time").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());
registry.addHandler(bedWebSocketHandler(), "/sockjs/websocket/get/by/time").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); registry.addHandler(alarmsWebSocketHandler(),"/websocket/get/alarms").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());
registry.addHandler(alarmsWebSocketHandler(), "/sockjs/websocket/get/alarms").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); registry.addHandler(overViewWebSocketHandler(),"/websocket/get/overview").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());
registry.addHandler(overViewWebSocketHandler(), "/sockjs/websocket/get/overview").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); }
@Bean
public AllBedWebSocketHandler allBedWebSocketHandler() {
return new AllBedWebSocketHandler();
} @Bean
public BedWebSocketHandler bedWebSocketHandler() {
return new BedWebSocketHandler();
} @Bean
public AlarmsWebSocketHandler alarmsWebSocketHandler() {
return new AlarmsWebSocketHandler();
} @Bean
public OverViewWebSocketHandler overViewWebSocketHandler() {
return new OverViewWebSocketHandler();
} @Bean
public WebSocketHandshakeInterceptor myInterceptor(){
return new WebSocketHandshakeInterceptor();
}
}
4、BedWebSocketHandler.java
package com.websocket; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bbkj.nursestation.common.ApiResult;
import com.bbkj.nursestation.common.UserVO;
import com.bbkj.nursestation.site.service.DeviceService;
import com.bbkj.nursestation.site.vi.HospitalBedDataVI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler; import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map; /**
* Created by hy on 11/29/16.
*/
@Component
public class BedWebSocketHandler extends TextWebSocketHandler { private final static List<WebSocketSession> sessions = Collections.synchronizedList(new ArrayList<WebSocketSession>()); @Autowired
private DeviceService deviceService;
//接收文本消息,并发送出去
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
super.handleTextMessage(session, message);
byte[] bytes = message.asBytes();
String params = new String(bytes);
JSONObject object=JSON.parseObject(params);
UserVO userVO = new UserVO();
userVO = (UserVO) session.getAttributes().get("websocketUser"); ApiResult<Map<String, Integer>> apiResult = new ApiResult<>(1, "error");
HospitalBedDataVI hospitalBedDataVI = new HospitalBedDataVI();
hospitalBedDataVI.setEn(Long.parseLong(object.get("en").toString()));
hospitalBedDataVI.setPaitenid(Long.parseLong(object.get("paitenid").toString()));
apiResult = deviceService.getHosptialBedRealTimeData4Websocket(hospitalBedDataVI);
apiResult.setUser(userVO);
session.sendMessage(new TextMessage(apiResult.toString())); } //连接建立后处理
@SuppressWarnings("unchecked")
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
//处理离线消息
}
//抛出异常时处理
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
if(session.isOpen()){
session.close();
} sessions.remove(session);
}
//连接关闭后处理
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { sessions.remove(session);
} @Override
public boolean supportsPartialMessages() {
return false;
} /**
* 给所有在线用户发送消息
*
* @param message
*/
public void sendMessageToUsers(TextMessage message) {
for (WebSocketSession user : sessions) {
try {
if (user.isOpen()) {
user.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 给某个用户发送消息
*
* @param userName
* @param message
*/
public void sendMessageToUser(String userName, TextMessage message) {
for (WebSocketSession user : sessions) {
if (user.getAttributes().get("username").equals(userName)) {
try {
if (user.isOpen()) {
user.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
}
5、DeviceService.java
package com.site.service; import com.bbkj.nursestation.common.ApiResult;
import com.bbkj.nursestation.site.entity.Device;
import com.bbkj.nursestation.site.vi.HospitalBedDataVI;
import com.bbkj.nursestation.site.vo.HosptialBedDataNow;
import com.bbkj.nursestation.site.vo.OverviewVO; import java.util.List;
import java.util.Map; /**
* Created by hy on 11/21/16.
*/
public interface DeviceService { ApiResult<Map<String,Integer>> getHosptialBedRealTimeData4Websocket(HospitalBedDataVI hospitalBedDataVI); }
7、Javascript
<script type="text/javascript" src="js/sockjs-1.1.1.min.js"></script>
<script>
var websocket;
if ('WebSocket' in window) { //某张床位实时信息接口
websocket = new WebSocket("ws://192.168.1.114:8099/websocket/get/by/time");
} else if ('MozWebSocket' in window) { websocket = new MozWebSocket("ws://192.168.1.114:8099/websocket/get/by/time");
} else { websocket = new SockJS("http://192.168.1.114:8099/sockjs/websocket/get/by/time"); }
websocket.onopen = function (evnt) {
alert("建立连接");
};
websocket.onmessage = function (evnt) {
alert(evnt.data)
};
websocket.onerror = function (evnt) {
};
websocket.onclose = function (evnt) {
} $('#send').click(function(e) {
var params ="{'en':1,'paitenid':1}";
websocket.send(params);
});
</script>
基于Spring mvc 的Websocket 开发的更多相关文章
- 基于Spring MVC的Web应用开发(三) - Resources
基于Spring MVC的Web应用开发(3) - Resources 上一篇介绍了在基于Spring MVC的Web项目中加入日志,本文介绍Spring MVC如何处理资源文件. 注意到本项目的we ...
- 【Java Web开发学习】Spring MVC整合WebSocket通信
Spring MVC整合WebSocket通信 目录 ========================================================================= ...
- 基于Spring MVC 实现拦截器
Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的, ...
- Spring MVC第一课:用IDEA构建一个基于Spring MVC, Hibernate, My SQL的Maven项目
作为一个Spring MVC新手最基本的功夫就是学会如何使用开发工具创建一个完整的Spring MVC项目,本文站在一个新手的角度讲述如何一步一步创建一个基于Spring MVC, Hibernate ...
- 基于spring mvc的图片验证码实现
本文实现基于spring mvc的图片验证码,分后台代码和前端页面的展现以及验证码的验证. 首看后台实现代码: @RequestMapping({"authCode"}) publ ...
- Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...
- 使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
1. 概述 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具. 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐 ...
- ssm(spring mvc+mybatis)+netty4开发qiq
发布时间:2018-10-30 技术:spring mvc+mybatis+nett4+layui 概述 简单快捷的IM方案,快速打造在线IM,可用于公司内网.外网通讯,客服系统等,实现了so ...
- spring MVC之注解开发控制器(二)
开发表单控制器 在传统的Spring MVC开发方法中,是通过扩展SimpleFormController类来创建简单的表单控制器.这样就定义了基本的表单处理流程,并允许通过覆盖几个生命周期方法来定制 ...
随机推荐
- LeetCode具体分析 :: Recover Binary Search Tree [Tree]
Recover the tree without changing its structure. Note: A solution using O(n) space is pretty straigh ...
- 谈谈Android重打包--初语
写在前面的话 仅以此系列献给喜欢我CSDN的小伙伴们 申明 此文禁止转载,谢谢合作 序言 在开头说这会是一个系列,那就说明我有非常多话要说.从最简单的介绍到问题的提出.解决方式的构思以及整个系统的架构 ...
- ES6学习笔记之变量声明let,const
最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能 ...
- [Docker]学习笔记--简单介绍
学习docker已经有一段时间了,一直没有静下心来好好总结一下. 最近用docker搭了一整套Gitlab的持续集成环境.(会在下一篇中详细的讲解具体步骤,敬请期待) 感觉是时候写点东西和大家一起分享 ...
- Highway
Highway Accepted : 78 Submit : 275 Time Limit : 4000 MS Memory Limit : 65536 KB Highway In ICPCC ...
- 在前端眼中pc端和移动的开发区别
按照昨天所说,本包子今天将总结在前端开发中,pc端和移动端的区别,整理完这些区别,本包子将开始整理pc端的布局,会写实际的代码了,还是那句话,希望文章中有什么不足的地方,大家能多多指正,大家一起进步, ...
- fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的. stdint.h是C99的标准,主要用于统一跨平台数据定义. MSVC中不带 ...
- Python迭代器包itertools(转)
原文:http://www.cnblogs.com/vamei/p/3174796.html 作者:Vamei 在循环对象和函数对象中,我们了解了循环器(iterator)的功能.循环器是对象的容器, ...
- 我的Android进阶之旅------>Android中如何高效率的进行简繁体转换
因为APP要做国际化适配,所以就需要顾及到香港和台湾都是使用繁体字,怎样快速便捷高效的把简体字转换成繁体字呢? 说实话我之前用的方法比较呆板,把每个需要转换的字符串进行在线翻译.今天突然发现word或 ...
- Js中localStorage
优点: 1.拓展了cookie的4K限制 2.将数据直接存储到本地,相当于一个5M的前端页面数据库 不足: 1.浏览器的大小不统一 2.IE8以上的IE版本才支持 3.localStorage的值类型 ...