Spring MVC中怎么利用webSocket保持长连接
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章给大家分享的是有关Spring MVC中怎么利用webSocket保持长连接,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。配置在
千家信息网最后更新 2025年12月02日Spring MVC中怎么利用webSocket保持长连接
本篇文章给大家分享的是有关Spring MVC中怎么利用webSocket保持长连接,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
配置
在
pom.xml中加入包依赖javax javaee-api 7.0 provided org.springframework spring-websocket 4.3.13.RELEASE
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 */ @OnOpen public 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"); } /** * 关闭时执行 */ @OnClose public 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()); ///webSocket this.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; }); //初始化webSocket webSocket.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保持长连接,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
服务器
服务
消息
经纬
经纬度
成功
客户
客户端
注解
错误
代码
位置
更多
知识
篇文章
网络
实用
前端
功能
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全中学生提案
北京软件开发薪资水平
网络产品服务应当符合网络安全
航天云课堂网络安全考试答案
网络安全数据分类
数据库中的数据资源要使用
泰州云主机服务器租用
网络安全国考
江西联泽互联网科技
数据库安全测试用例
怎么投资手机软件开发
学校网络安全自查哪里
FO软件开发方法是什么
服务器有没有比较高端叫法
39互娱网络技术
超玩先锋为什么选不了服务器
数据库性能的主要指标
僵尸服务器是什么
为何定义瀑布型软件开发模型
海阳定制软件开发公司
脚本将sql文件写进数据库
现在是科技时代还是互联网时代
软件开发外包要注意什么
数据库中的减函数
手机版本不同的服务器怎么下载
天津维科互联网科技有限公司
一种服务器备用电源
为什么数据库多个库
数据库是算法还是开发
服务器异地登录