说明

客户端需要与服务器保持长连接

配置

  • 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保持长连接相关推荐

  1. spring mvc maven ajax异步长连接 startAsync报错not suport

    需要添加支持 在xml里添加 <async-supported>true</async-supported> 准确的说是在 所有拦截器里添加 如Filter dipatcher ...

  2. html5 长链接,Vue通过WebSocket建立长连接,连接

    Vue通过WebSocket建立长连接,连接 使用场景: 在项目开发中,后端需要处理一连串的逻辑,或者等待第三方的数据返回来进行处理之后在返回给前端,可能时间会很长,而且前端也不知道后端什么时候能处理 ...

  3. Android的autobahn框架使用实例:实现WebSocket的长连接

    Android的autobahn框架使用实例:实现WebSocket的长连接 WebSocket三方框架: 01.Java-WebSocket:存在断开之后无法重新连接的问题 02.autobahn: ...

  4. http、websocket、长连接、短连接(一)

    http.websocket.长连接.短连接(一) http.websocket.长连接.短连接(二) 这一篇先讲一下http的长短连接的问题 1. HTTP协议与TCP/IP协议的关系 HTTP的长 ...

  5. python长连接框架_python之websocket【长连接的实现】

    websocket技术简单来说就是实现了长连接的技术,相对于传统的ajax或者轮询,websocket主要实现了双通信,并且减少了长轮询的多次请求的时间.总的来说,在很多应用上面能够发挥更好的作用,比 ...

  6. websocket 实现长连接原理

    一.前文介绍 WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是 ...

  7. 不要小看 WebSocket!长连接、有状态、双向、全双工都是王炸技能

    MQTT 是一种长连接的技术,所谓的长连接,就是保持长久的连接,每次连接可以传输多次数据,并且连接双方有保活机制维持连接.就好比异地办公室一样,有台设备一直保持在线,有问题需要沟通的时候,通过这台一直 ...

  8. Websocket 百万长连接技术,在石墨文档中的实践

    今日推荐 推荐一个 Java 接口快速开发框架干掉Random:这个类已经成为获取随机数的王者Docker + Intellij IDEA,提升 10 倍生产力!笑出腹肌的注释,都是被代码耽误的诗人! ...

  9. 石墨文档Websocket百万长连接技术实践

    内容简介:Web 服务端推送技术经过了长轮询.短轮询的发展,最终到 HTML5 标准带来的 WebSocket 规范逐步成为了目前业内主流技术方案.它使得消息推送.消息通知等功能的实现变得异常简单,那 ...

最新文章

  1. Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver
  2. 如果你的云服务商倒闭该怎么办?
  3. python3爬取新浪NBA新闻信息(待完善)
  4. 【MPI程序】向量乘法,向量点积(高性能计算)
  5. redis 3.2.1 centos7
  6. 原型模式(ProtoType) - Java里的对象复制
  7. ABAP 动态 SQL
  8. android事务队列处理的实现
  9. 网站测试自动化系统—收集测试结果
  10. 雷达的工作原理示意图_雷达的荧光屏真的相当于蝙蝠的耳朵吗
  11. [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
  12. ssm-学子商城-项目第一天
  13. Anylogic学习--------------三维窗口
  14. Javac源码简单分析之解析和填充符号表
  15. 在rhel7.3中编译和使用log4cxx
  16. SparkSteaming运行流程分析以及CheckPoint操作
  17. python调用chrome插件_使用Python开发chrome插件
  18. mac 上传ftp服务器文件大小,mac与windows通过ftp传输文件
  19. 关系型到文档型的跨越:颠覆你对数据库数据模型的认识
  20. C++Primer笔记

热门文章

  1. 吴恩达家免费NLP课程上线啦!
  2. 常见概率分布的Matplotlib实现
  3. 在线阅读!!机器学习数学精华:线性代数
  4. js实现移动端图片预览:手势缩放, 手势拖动,双击放大...
  5. Linux基础(day59)
  6. 大家都较熟悉之 Kubernetes API 分析
  7. Asp.Net Core MVC控制器和视图之间传值
  8. C++ STL学习之容器set和multiset (补充材料)
  9. bootstrap-导航条反色的导航条
  10. Android动态加载插件APK