生活随笔
收集整理的這篇文章主要介紹了
Spring MVC使用webSocket保持长连接
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說明
客戶端需要與服務器保持長連接
配置
<!-- 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 -->
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);}
}
/*** 與服務器保持長連接* @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保持长连接的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。