【问题标题】:Socket.IO Client doesn't work properly on 3g/4g connectionSocket.IO 客户端在 3g/4g 连接上无法正常工作
【发布时间】:2019-04-05 18:18:30
【问题描述】:

我一直在网上搜索我在 3g/4g 网络上使用 socketio 客户端时遇到的问题。好像可以连接,但连接不长,保持连接约60秒然后断开,当重连尝试事件触发时再次连接,但重复上述行为。

有谁知道为什么会发生这种情况或如何解决?

提前致谢!

这是我用来启动 de socket 的代码示例:

var socketOpts = { 
                        reconnect: true,
                        reconnectionDelayMax : 2500,
                        timeout : 10000,
                        transport: ['polling','websocket']
                     };

    socket = io.connect( $scope.socket_addr, socketOpts );

    showMessage( true, "Aguardando conexão com o servidor!", true );

    /* Abaixo estão os eventos que o Socket pode disparar durante o funcionamento do app */

    /* Quando o Socket conectar no servidor */
    socket.on("connect", function() 
    {
        $scope.socket_connected = true;
        /* Agora que o socket já conectou, posso alterar o tempo de ping */
        socket.io.engine.pingInterval = 3000;
        socket.io.engine.pingTimeout = 5000;
        showMessage( false, "", false );
        console.log( "WS conectado" );
    });

【问题讨论】:

  • 这就是移动连接的工作原理以及使用“偶尔连接”一词的原因。你总是会失去连接,因为你进入了电梯,一个盲区即使在城市,你的手机有断线问题,或者你搬到了房子的另一边。 不要尝试保持连接打开
  • 感谢您的回复,但此代码属于 Cordova 应用程序,通常用于街道开阔的天空。它应该连接更多时间,不是吗?我的意思是,websocket 应该完全可以保持连接打开,还是我错了?
  • @Fernando Rebêllo 我也注意到了同样的行为。每分钟都连接一个新的 socket.id。你找到解决方案了吗?它在 wifi 上运行良好……不是 LTE、4g……
  • @InêsGomes,我注意到套接字曾经关闭,因为当用户锁定屏幕时,操作系统正在休眠应用程序,所以我添加了一个 backgroundMode 插件以避免应用程序休眠,它消耗更多电池,但这对我来说不是问题。我还减少了到服务器的 ping 间隔,因此意识到连接消失并打开一个新连接需要更少的时间。希望对您有所帮助!
  • 谢谢@Fernando Rebêllo。 :-) 我想我会尝试增加超时时间

标签: websocket socket.io intermittent 3g-network


【解决方案1】:

设置这些选项以延迟重新连接工作:-)

val opts = IO.Options()
opts.reconnection = true
opts.reconnectionDelay = 2000
opts.timeout = 60000
val socket = IO.socket(url, opts)

或者在离子中

socketConf: {
    url: 'http://your.Server.url',
    options: { reconnection: true, reconnectionDelay: 3000, timeout: 60000 }
  }

【讨论】:

  • 嗨@InêsGomes,感谢您回答这些问题,虽然我的问题是Android睡眠状态终止连接,但其他用户可能会因为这个时间而遇到这些问题。再次感谢您分享您的解决方案!
  • 嗨@FernandoRebêllo 什么 backgroundMode 插件对你有用?
  • 嗨@InêsGomes,我使用了katzer backgroundMode 插件,但是请记住,这个插件只适用于Android,实际上,它也适用于iOS,但苹果出于某些技术原因拒绝发布。 github.com/katzer/cordova-plugin-background-mode希望对您有所帮助!
  • 谢谢@FernandoRebêllo 我在使用该插件时遇到了很多问题。但是以github.com/irceline/aq-mobile-be/issues/… 和唤醒锁的方式解决了这个问题
猜你喜欢
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 2015-08-13
  • 1970-01-01
  • 2017-09-23
  • 2018-10-12
相关资源
最近更新 更多