Socket.io

作者: gersces | 来源:发表于2020-06-12 11:12 被阅读0次

    简单的使用不一一赘述了,其他的博主都已经介绍很多了,在此我就记录一下自己接入socket.io时的想法和bug。

    想法:

    1、APP进入后台之后,将所有的event都删除了;然后再唤醒的时候,再把所有的event都添加上。

    manager里用字典对将所有的event和emit需要的参数 都保存了。这样才能保证在唤醒之后,能获取所有的event。

    2、监听连接状态,在连接成功之后,再执行上述(1)操作。

    bug:

    1、emit时候,api的入参是array类型的。而后端可能需要的是字典。

    只需要将字典用数组包一下就可以了,也即是字典是数组的第一个元素。

    2、ack,官方git上是emitWithAck:with:timingOutAfter:callback:   但是API里面并没有此API

    用ack接收一下

    3、监听连接状态,用KVO一直不触发监听。

    官方有提供监听链接状态的event

    监听连接状态改变

    4、disconnect不发挥作用。

    将socket(SocketIOClient)  disconnect即可。

    5、socket.io的自动重连,但是过一会儿就会收不到推过来的数据,但是心跳还在。

    后端用的是netty-socketo三方库,而iOS端官方的库不知道是写的有问题,还是跟后端的不兼容。

    bug出现原因,虽然重连前后的sid是一致的,但是此时对后端来说已经是两个会话了。当后端接收不到断开前回会话的心跳,后端超时,就不会在向此sid的会话推数据,而此时两次会话的sid是一致的,所有就收不到数据了。至于iOS客户端的心跳还在,只是说明会话还在,但是后端不推了。
    bug解决,后端设置config.setRandomSession(true).

    6、一个接口,后端会同时推多次数据。

    bug出现原因,因为client的handlers里面有多个handle(同一event),所以在收到数据的时候,根据handles找到了多个handle。

    bug解决,1、在on之前,先执行off。2、修改源码,在handles去重。我是这么做的,如图

    修改pod的三方库之后,记得clean一下,再run

    7、ack收到乱码。

    bug出现原因,因为utf8编码问题。iOS13弃用了doubleEncodUtf8,socket.io在2.0版本(此版本不是pod search到的版本),也弃用了。而后端、安卓等都是1.0。所以有些不兼容,不知道是该开心,还是该不开心。

    bug解决,

    ①下载 V 9.x版本(10.0.0以上(包含)的是socket.io2.0,以下的socket.io1.0)。注意:pods上的V9.x版本是swift3语音,有点旧。但是git上有个1.0-swift4分支。如果你在swift4环境下,项目bulid没问题,那么可以考虑这个。

    ②这个是不是方法的方法,因为我项目中有别的三方需要swift5,所以不能用第一种方法。我遇到的问题,是接收到ack回调的时候乱码,别的时候不会出现,所以我麻烦后端的同事在接到ack事件的时候,同时再执行一下on的回调。

    相关文章

      网友评论

          本文标题:Socket.io

          本文链接:https://www.haomeiwen.com/subject/walgtktx.html