关于在vue中调用SignalR推送所遇到的坑

最近在vue中使用SignalR做消息推送的时候遇到了一些坑,也许是我对SignalR还不够深入的研究,或者理解的还不够到位,还望各位大神别喷我啊。。。我也第一次使用SignalR

1.遇到的SignalR来回断开,然后重新实例连接的问题

遇到这个问题的时候我也是百度了很多次,但是始终没有找到原因,后来只能自己埋头研究,其他的不扯了,上图

关于在vue中调用SignalR推送所遇到的坑_第1张图片
从上图可以看到这个是一个连接 SignalR的方法,这个是方法是现在的完成版,坑的版是没有判断that.signalrinfo.conn这个对象是否为null,当我每次切换页面的时候我就会去调用connectServer这个方法,然后重新创建一个hubConnection连接对象,这个时候问题来了,就是服务端根本就监控不到你的第二次的连接id,但是初始的连接又是能监控到的,具体是为什么我也不得而知,有知道的大神希望能给我解释一下啊。

2.在当页不断切换断开连接SignalR,会出现接收消息绑定多个

that.signalrinfo.proxy.on(“SendMessage”)这个就是绑定接收消息的方法,当that.signalrinfo.conn为空的时候我们的监控方法是没问题。
但是当that.signalrinfo.conn不为空的时候,我们切换就会出现监听了多个SendMessage如图:
关于在vue中调用SignalR推送所遇到的坑_第2张图片
看到图中的SendMessage是个数组,如果不将之前的方法移调就会出现这个数组有很多个,所以在绑定前我们要先that.signalrinfo.proxy.off(“SendMessage”)保证这个接收是唯一的

3.接收消息方法里this对象的指向

我问都知道在vue中this指向,在methods的方法中我们要修改数据,我们都是在方法的里调用this.xxx来修改数据显示到页面,
但是在SignalR的接收消息方法中这个this对象的指向让我很不明白,我开始的写法是这样的

  getMsg() {
  	var that=this;
      that.signalrinfo.proxy.off("SendMessage");
      that.signalrinfo.proxy.on("SendMessage", data => {
      			if(data.xxx==that.xxx){
      			 	that.xxx=data.xxx;
      			}
     			
      });
   }

这个时候我们不断的在当页切换SignalR断开,启动这个时候的this还是能够达到更新xxx的数据;
当我们切换页面的事,如果这个时候我们去到首页然后在从首页进入到这个详细页,然后启动SignalR,这个时候接受的消息的this对象并不是我们进来的,而是上次最后离开的那个this对象,为什么是这样我也不得而知,希望高手能指点我,后来我的解决方法就是将this这个对象传进来以达到更新数据的目的,可能写的比较含糊,也不知道怎么表达,希望能够不要碰我.

你可能感兴趣的:(vue)