凯发k8官方网
收集整理的这篇文章主要介绍了
spring mvc使用websocket保持长连接
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
说明
客户端需要与服务器保持长连接
配置
javaxjavaee-api7.0providedorg.springframeworkspring-websocket4.3.13.release 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.getwebsocket); ///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);}}
总结
以上是凯发k8官方网为你收集整理的spring mvc使用websocket保持长连接的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。