Reactjs 页面关闭后无法在服务工作者中维护websocket

Reactjs 页面关闭后无法在服务工作者中维护websocket,reactjs,websocket,push-notification,service-worker,Reactjs,Websocket,Push Notification,Service Worker,我在服务人员中使用websocket。当网页打开时,它工作得很好,但如果网页关闭,websocket会断开连接并停止工作,这让我很困惑 事实上,因为位于中国,我不能使用谷歌FCM和推送api,所以我想使用websocket推送消息 我的程序是在CreateReact应用程序下构建的 //serviceWorker.js const WebSocketConnect = () => { let ws = new WebSocket("ws://127.0.0.1:8000/ws/news

我在服务人员中使用websocket。当网页打开时,它工作得很好,但如果网页关闭,websocket会断开连接并停止工作,这让我很困惑

事实上,因为位于中国,我不能使用谷歌FCM和推送api,所以我想使用websocket推送消息

我的程序是在CreateReact应用程序下构建的

//serviceWorker.js
const WebSocketConnect = () => {
  let ws = new WebSocket("ws://127.0.0.1:8000/ws/news/")
  ws.onopen = function() {
      setInterval(() => {
          if ( 'readyState' in ws && ws.readyState === 1 ) {
              ws.send('Hay')
          }
      }, 5000)
  }

  ws.onmessage = function(e) {
      console.log('Message:', e.data)
  }

  ws.onclose = function(CloseEvent) {
      ws.close()
      console.log(`Socket is clossed, code: ${CloseEvent.code} - reason: ${CloseEvent.reason}`)
      setTimeout(() => {
          WebSocketConnect()
      }, 3000)
  }

  ws.onerror = function(err) {
      console.log(err)
      //console.error('Socket encountered error: ', err.message, 'Closing socket')
      ws.close()
  }
}

WebSocketConnect()

很可能您的服务人员正在被停止,这将关闭WebSocket

浏览器限制服务工作者脚本在关闭前可以运行的时间。处理事件(如FetchEvent、MessageEvent、PushEvent等)将唤醒工作进程,并允许其运行,直到事件得到处理。大多数浏览器会在空闲30秒后停止服务人员

浏览器还将在一段时间后通过waitUntil()暂停打开的事件,以停止工作进程。在大多数浏览器中,这些超时通常发生在大约5分钟后

当站点没有打开的窗口时,浏览器通常会更努力地阻止服务人员,因为在后台运行可能会被滥用


我不相信web平台目前有能力在后台连续运行WebSocket之类的东西,而不打开站点窗口。

thx谢谢您的回答!如果用户不能使用FCM和任何其他google服务,即使没有打开站点窗口,你还有其他想法向用户发送消息吗?我相信推送通知是为该用例设计的API。不过,我不确定这是否满足了您不依赖谷歌服务的需求。这同样适用于不可以使用外部推送服务的气隙环境。任何解决方案都是非常受欢迎的!