Spring MVC使用webSocket保持长连接
说明
客户端需要与服务器保持长连接
配置
- 在
pom.xml
中加入包依赖<!-- webSocket start Add by zhangxueliang 2019-02-22 --><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>7.0</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-websocket</artifactId><version>4.3.13.RELEASE</version></dependency><!-- webSocket end -->
- Java后台实现代码
package com.netcar.tien.mobile;import java.io.IOException;import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint;import org.springframework.web.socket.server.standard.SpringConfigurator;import com.netcar.tien.core.log.LogFactory; import com.netcar.tien.core.log.OnlineLog;/*** 保持socket连接* @author JoyoDuan* Add by JoyoDuan on 2018-02-22* * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端*/ @ServerEndpoint(value="/app/webSocket", configurator = SpringConfigurator.class) public class WebSocket {private OnlineLog logger = LogFactory.getOnlineLog(WebSocket.class);//socket连接会话,用于发送消息给客户端private Session session;/*** 客户端连接成功* @param session* @throws IOException*/@OnOpenpublic void onOpen(Session session) throws IOException {this.session = session; // System.out.println("WebSocket连接成功");logger.info("WebSocket - 连接成功");}/*** 收到消息时执行* @param message* @param session* @throws IOException*/@OnMessage public void onMessage(String message, Session session) throws IOException { this.sendMessage("success");}/*** 关闭时执行*/@OnClosepublic void onClose() { logger.info("webSocket - 连接关闭"); // System.out.println("webSocket连接关闭");}/*** 连接错误时执行* @param session* @param error*/@OnError public void onError(Session session, Throwable error) {logger.error("webSocket - 出错:" + error.getMessage()); // System.out.println("webSocket出错" + error);}/*** 发送消息给客户端* @param message* @throws IOException*/public void sendMessage(String message) throws IOException {this.session.getBasicRemote().sendText(message);} }
- 前端使用webSocket代码
/*** 与服务器保持长连接* @param {boolean} [isReconnect]* @returns* @memberof HomePage*/connectWebSocket(isReconnect?: boolean){let webSocket = new WebSocket(this.urlService.getWebSocketURL()); ///webSocketthis.globalData.isLog && console.log('WebSocket:', 'WebSocket' in window);//上传经纬度的定时器let uploadLngLatTimer: number = null;if (!isReconnect && !('WebSocket' in window)){// this.nativeService.alert('您的手机不支持位置上传');return;}//监测网络断开this.nativeService.monitorNetworkDisconnect(() => {this.nativeService.toast('亲,网络连接中断了');//递归,重新连接this.connectWebSocket(true);return;});//初始化webSocketwebSocket.onopen = (event) => {this.globalData.isLog && !isReconnect && console.log('webSocket - 连接服务器成功!', event);this.globalData.isLog && isReconnect && console.log('webSocket - 重新连接服务器!', event);//每隔10秒上传一次经纬度uploadLngLatTimer = setInterval(() => {//上传经纬度时定位当前位置this.getAMapLocationByJS(true, () => {// webSocket.send('JoyoDuan' + new Date().getTime());let params = {strokeNo: this.trip.strokeNo,strokeStatus: this.trip.strokeStatus,strokeLongitude: this.position.currentPosition.lngLat.lng,strokeLatitude: this.position.currentPosition.lngLat.lat,routeId: this.trip.routeId,carTypeId: this.trip.carTypeId || ''};//发送经纬度到服务器webSocket.send(Secret.encodeBase64String(JSON.stringify(params)));this.globalData.isLog && console.log('webSocket - 实时上传经纬度发送参数:', JSON.stringify(params));});}, TIMEOUT.UPLOAD_LNGLAT_TIMEOUT);};//连接关闭时执行webSocket.onclose = () => {this.globalData.isLog && console.log('webSocket - 连接服务器关闭!', event);//清除计时器,停止发送clearInterval(uploadLngLatTimer);};//连接出现错误时执行webSocket.onerror = (event) => {this.globalData.isLog && console.log('webSocket - 连接服务器错误!', event);//10秒重连一次setTimeout(() => {this.connectWebSocket(true);}, TIMEOUT.RECONNECT_WEB_SOCKET);};//收到服务器消息时执行webSocket.onmessage = (event) => {this.globalData.isLog && console.log('webSocket - 服务器发送的消息!', event);}}
Spring MVC使用webSocket保持长连接相关推荐
- spring mvc maven ajax异步长连接 startAsync报错not suport
需要添加支持 在xml里添加 <async-supported>true</async-supported> 准确的说是在 所有拦截器里添加 如Filter dipatcher ...
- html5 长链接,Vue通过WebSocket建立长连接,连接
Vue通过WebSocket建立长连接,连接 使用场景: 在项目开发中,后端需要处理一连串的逻辑,或者等待第三方的数据返回来进行处理之后在返回给前端,可能时间会很长,而且前端也不知道后端什么时候能处理 ...
- Android的autobahn框架使用实例:实现WebSocket的长连接
Android的autobahn框架使用实例:实现WebSocket的长连接 WebSocket三方框架: 01.Java-WebSocket:存在断开之后无法重新连接的问题 02.autobahn: ...
- http、websocket、长连接、短连接(一)
http.websocket.长连接.短连接(一) http.websocket.长连接.短连接(二) 这一篇先讲一下http的长短连接的问题 1. HTTP协议与TCP/IP协议的关系 HTTP的长 ...
- python长连接框架_python之websocket【长连接的实现】
websocket技术简单来说就是实现了长连接的技术,相对于传统的ajax或者轮询,websocket主要实现了双通信,并且减少了长轮询的多次请求的时间.总的来说,在很多应用上面能够发挥更好的作用,比 ...
- websocket 实现长连接原理
一.前文介绍 WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是 ...
- 不要小看 WebSocket!长连接、有状态、双向、全双工都是王炸技能
MQTT 是一种长连接的技术,所谓的长连接,就是保持长久的连接,每次连接可以传输多次数据,并且连接双方有保活机制维持连接.就好比异地办公室一样,有台设备一直保持在线,有问题需要沟通的时候,通过这台一直 ...
- Websocket 百万长连接技术,在石墨文档中的实践
今日推荐 推荐一个 Java 接口快速开发框架干掉Random:这个类已经成为获取随机数的王者Docker + Intellij IDEA,提升 10 倍生产力!笑出腹肌的注释,都是被代码耽误的诗人! ...
- 石墨文档Websocket百万长连接技术实践
内容简介:Web 服务端推送技术经过了长轮询.短轮询的发展,最终到 HTML5 标准带来的 WebSocket 规范逐步成为了目前业内主流技术方案.它使得消息推送.消息通知等功能的实现变得异常简单,那 ...
最新文章
- Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver
- 如果你的云服务商倒闭该怎么办?
- python3爬取新浪NBA新闻信息(待完善)
- 【MPI程序】向量乘法,向量点积(高性能计算)
- redis 3.2.1 centos7
- 原型模式(ProtoType) - Java里的对象复制
- ABAP 动态 SQL
- android事务队列处理的实现
- 网站测试自动化系统—收集测试结果
- 雷达的工作原理示意图_雷达的荧光屏真的相当于蝙蝠的耳朵吗
- [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
- ssm-学子商城-项目第一天
- Anylogic学习--------------三维窗口
- Javac源码简单分析之解析和填充符号表
- 在rhel7.3中编译和使用log4cxx
- SparkSteaming运行流程分析以及CheckPoint操作
- python调用chrome插件_使用Python开发chrome插件
- mac 上传ftp服务器文件大小,mac与windows通过ftp传输文件
- 关系型到文档型的跨越:颠覆你对数据库数据模型的认识
- C++Primer笔记