背景:公司產品是用electron做的pc端。底層基於Chromium 和 node.js。 公司的產品有一個運用場景是進行某些操作。需要后台向前端推送一些消息。
因此我們采用websockets來保持服務器和前端的通信。
問題點:sockets在連接一段時間后會自動斷開。后台向前端推送的消息前端無法接收到。
初步排查判斷是因為自動重連失效。但是本身websockets就是基於tcp的。本身socket就有保持連接的能力。 我們通過wireshark的查看tcp的日志發現sockets是有在做重連。
后台也確實保持着狀態。 我們前端加入循環判斷。只要斷開就自動重連。但是通過日志我們發現有個很奇怪的現象斷開時間都是8分鍾。排查后才發現每隔一段時間斷開是因為
服務器內核設置的問題。

我們修改了內核設置參數。將服務器內核時間調到7200秒也就是兩小時。 但是后面在實際業務場景中用戶會有把客戶端打開兩個小時不操作的情況。
再次操作時socket已經斷開再也無法連接上。 我們想到一個方案前端每重連10次就重新建立一個新的連接。這個方案我們測試了在服務器上部署跑了72小時沒有出現斷開了再也連接不上的問題。
