日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring MVC使用webSocket保持长连接

發布時間:2025/1/21 javascript 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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保持长连接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。