Socket.IO 客户端在 3g/4g 连接上无法正常工作
Posted
技术标签:
【中文标题】Socket.IO 客户端在 3g/4g 连接上无法正常工作【英文标题】:Socket.IO Client doesn't work properly on 3g/4g connection 【发布时间】: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。 :-) 我想我会尝试增加超时时间 【参考方案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/… 和唤醒锁的方式解决了这个问题以上是关于Socket.IO 客户端在 3g/4g 连接上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
CFNetwork SSLHandshake 仅在 3G/4G 上失败(-9806)(不在 Wifi 上)
socket.io xhr 在慢速连接上发布错误(3G 移动网络)