Android 上的 Chrome:连接在 30 分钟后失效

菲奥·阿卡·伦

我们正在使用我们自己的通知系统构建一个聊天室,不依赖于 GCM,而是使用 Service Worker + SSE。在桌面上它很好,但在移动 android 应用程序上(使用 cordova-crosswalk ,chromium 53)。长时间运行的通知连接在 20-30 分钟后卡住,并且处于前台活动状态。它不会因错误而死,只是没有收到数据。完全没有错误,这很奇怪。无法重新连接,因为我们根本不知道连接是否已死。

最干净的方法是什么?每 5 分钟重新启动一次连接是一种想法,但它并不干净。代码

  runEvtSource(url, fn) {
if (this.get('session.content.isAuthenticated') === true) {
  var evtSource = new EventSource(url, {
    withCredentials: true
  });
}}

主动重新连接代码

var evtSource = this.runEvtSource(url, fn)
var evtSourceErrorHandler = (event) => {
  var txt;
  switch (event.target.readyState) {
    case EventSource.CONNECTING:
      txt = 'Reconnecting...';
      evtSource.onerror = evtSourceErrorHandler;
      break;
    case EventSource.CLOSED:
      txt = 'Reinitializing...';
      evtSource = this.runEvtSource(url, fn)
      evtSource.onerror = evtSourceErrorHandler;
      break;
  }
  console.log(txt);
evtSource.onerror = evtSourceErrorHandler
达伦库克

我通常在 SSE 连接的顶部添加一个保持活动层。这种情况并不经常发生,但是套接字可能会在没有正常死亡的情况下死亡,因此您的连接会变得安静并且不会出现错误。

因此,一种方法是,在您的 get data 函数中:

if(timer)clearTimeout(timer);
timer = setTimeout(reconnect, 30 * 1000);
...process the data

换句话说,如果距离上次获取数据已经超过 30 秒,请重新连接。根据您发送数据的频率选择一个值:如果 10% 的时间数据事件之间有 60 秒的间隔,但从来没有 120 秒的间隔,那么将超时设置为高于 120 秒是有意义的.

您可能还希望通过将常规消息从服务器推送到客户端来保持活动状态。如果来自服务器的消息频率非常不规则,这是一个好主意。例如,我可能让服务器每 30 秒发送一次当前时间戳,并在客户端上使用 45 秒的保持活动超时。

顺便说一句,如果这是一个移动应用程序,请记住用户是否会欣赏减少接收聊天消息的延迟而不是电池寿命缩短的缺点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

套接字IO连接在Android上失败

来自分类Dev

30分钟后,即使在BIOS屏幕上,PC也会关闭

来自分类Dev

我在android应用中的永久数据在30分钟后再次打开时会丢失

来自分类Dev

OpenVPN无法在Fedora 30上连接

来自分类Dev

Android UI挂在JDBC连接上-即使连接在另一个线程上

来自分类Dev

Android 用于在 30 岁后杀死 Activity

来自分类Dev

30分钟后性能下降

来自分类Dev

ffmpeg -f 段在 30 分钟后失败

来自分类Dev

SSLException-连接在Android 4.x版本上被对等方关闭

来自分类Dev

互联网套接字连接在 android 上停止应用程序

来自分类Dev

在30分钟之前获取Android Unix时代?

来自分类Dev

30 秒后 nginx websocket 连接超时

来自分类Dev

为什么MutationObserver代码不能在Chrome 30上运行?

来自分类Dev

如何连接在通过 ADB 连接的设备上运行的 android 应用程序以访问本地服务器上的 REST API?

来自分类Dev

GridLayout直接在ImageView上-android

来自分类Dev

SQL左连接在单个表上

来自分类Dev

SQL条件连接在不同的表上

来自分类Dev

如何在Android 11(Api 30)上实现Android Bubbles通知

来自分类Dev

升级Android Studio 2.1.1后错误:(30,13)

来自分类Dev

Mediaplayer在30次点击后在android中停止

来自分类Dev

升级Android Studio 2.1.1后错误:(30,13)

来自分类Dev

DialogFragment在30次后将无法打开-Android

来自分类Dev

30分钟后删除按钮。拉拉韦尔

来自分类Dev

IdentityServer4在30分钟后自动注销

来自分类Dev

30分钟后删除记录SQLite

来自分类Dev

30分钟后编程开始和结束

来自分类Dev

15-30分钟后随机冻结

来自分类Dev

30 分钟不活动后 mongo DB 的套接字超时

来自分类Dev

整整 30 分钟后关于 CentOs 7 问题的 puppeteer 问题

Related 相关文章

热门标签

归档