socket-client+stomp.js總結

1.前端在websocket連接后端時,沒有帶token,后端報錯并寫入日志,前后端無法連接時,前端不斷的發(fā)請求試圖去連接,后端不斷寫日志,然后后端日志撐爆了。

原因:連接關閉后xhr_streaming無限循環(huán)。根據(jù)sockjs-client的說明,如果客戶端采用websocket連接不上服務器,它可以回退選擇其他傳輸方案比如xhr_streaming等等

解決一:在sockjs-client上GitHub的issue上面看到了解決方法

      let sock = new SockJS(httpaddres);
      var _transportClose = sock._transportClose;
      sock._transportClose = function(code, reason) {
      if (this._transport && this._transport.close) {
         this._transport.close();
      }
     _transportClose.call(this, code, reason);
     }

我看到這已在master中修復,但在1.1.4中沒有。我用的就是1.1.4
解決二:配置option中的transports。

new SockJS('http://arcs.dev.nicai.com', null, {transports:['websocket']})

transports:此選項允許您提供可由SockJS使用的列表傳輸。默認情況下,所有可用的傳輸都將被使用,但有時需要禁用一些回退傳輸是有用的。

2.服務器連接不上,重連機制
項目采用的方案是采用試圖連接10次,每次間隔時間逐漸延長的機制進行重連
代碼示例

    getnewjq(count) {
      let num=count||1;
      let httpaddres = policeApi.sockpoliceAddress;
      let sock = new SockJS(httpaddres);
      this.stomp = Stomp.over(sock);
      this.stomp.connect(
        "guest",
        "guest",
        frame => {
          this.stomp.subscribe(
            "/user/topic/pd_warning_newest/",
            this.refreshjq
          );
        },
        error => {
          if (num < 10) {
            setTimeout(() => {
              this.getnewjq(num + 1);
            }, 10000 * num);
          } else {
            console.log("放棄重連了");
          }
        }
      );
    },

      });
    },

3.stomp心跳機制
stomp默認的心跳為10000ms,
heartbeat.outgoing:客戶端發(fā)給服務端的心跳,* 0表示它不能發(fā)送心跳 * 否則它是能保證兩次心跳的最小毫秒數(shù)
heartbeat.incoming:客戶端希望服務端發(fā)送的心跳。* 0表示它不想接收心跳 * 否則它表示兩次心跳期望的毫秒數(shù)
CONNECT
heart-beat:<cx>,<cy> 客戶端

CONNECTED:
heart-beat:<sx>,<sy> 服務端
對于client發(fā)送server的心跳: * 如果<cx>為0(client不能發(fā)送心跳)或者<sy>為0(server不想接收心跳),將不起任何作用。心跳頻率為MAX(<cx>,<sy>)毫秒數(shù).
對于server發(fā)送client的心跳:心跳頻率為MAX(<cy>,<sx>)毫秒數(shù).

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容