千家信息网

Spring MVC中怎么利用webSocket保持长连接

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章给大家分享的是有关Spring MVC中怎么利用webSocket保持长连接,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。配置在
千家信息网最后更新 2026年11月01日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安全错误 数据库的锁怎样保障安全 互联网科技 互联网科技公司经营范围 科技和互联网公司 今日互联网科技 艾特科技互联网 哈尔滨新华互联网科技 济南华为互联网科技产业总部基地 小米互联网科技园设置 金融科技与互联网金融相同和不同 世界互联网科技公司市值排名 注册互联网科技公司经营范围大全 洛阳昕诺飞互联网科技有限公司 本届互联网博览会上的黑科技 互联网金融科技名词解释 工业互联网展湾科技股份有限公司 互联网金融科技元年 西安有哪些互联网高科技企业 青岛易易互联网科技 互联网科技创新创业项目 陕西彩京云互联网科技有限公司 互联网 卓越科技 鑫亿盛互联网科技 九亚互联网科技 厦门比较好的科技互联网公司 辽宁互联网新科技 互联网科技研发水平 深圳艾果互联网通讯科技 半导体是互联网高科技吗 互联网科技包装股份有限公司上市 广州三三互联网科技有限公司
0