美文网首页
IM 小项目总结

IM 小项目总结

作者: 一个冬季 | 来源:发表于2021-05-04 14:27 被阅读0次
    参考文章

    [023]你真的懂AIDL的oneway嘛?
    系统“内存重启”后,Activity和Fragment的生命周期浅谈
    FragmentActivity重启时Fragment状态异常的问题解决办法

    概述

    此偏是我做了一个小型的IM的一个总结,采用到的思想,遇到的问题分享给大家

    采用过的通信方案

    1、多进程方式,通过Messenger多进程通信,这种模式是属于队列模式。
    我目前感受到的缺点

    • 一次只能处理一次请求,对于高频率的聊天不适合
    • 无法通过直接调用方法名称的方式来处理,你只能通过判断message.what的方式

    2、多进程方式,Aidl多进程通信,可以通过调用方法名称的方式,可以异步进行回调(采用 oneway)
    我目前采用的是第二种方案

    遇到的问题

    1、A 进程与B进程通信,如果传输量大(可以传输的大小,1M-8KB,如果aidl是oneway 还得可以传输的大小还得/2),会直接 android.os.TransactionTooLargeException 。
    我目前的处理是,如果传输的量 > 200k 就将数据存储到本地,然后发送一个刚刚存储数据的唯一ID,给另外一个进程,进行本地数据库查询获取数据。

    2、 既然是聊天,那就会设计到与服务器的通信,有采用过socket,但是这玩意会存在黏包现象发生,后面就采用okhttp的webscoket,这玩意就没有出现过黏包现象,不知道是否跟html的一样,遵循了RFC规范所以就不会这产生这种现象。我采用的轮子RxWebSocket,但是它这个我在测试的时候发现一个问题,我跟服务器之间断开连接后,想再次连接就无法连接上,它是通过一个map的方式,将url作为key,websocket作为value的方式,也就是他可以处理多个websocket。由于我项目只有一个websocket,所以我讲map的方式进行移除了,这里是我修改后的地址 在这里你完全可以摒弃我主demo的东西,和 WebSocket --- components 包里面的东西

    相关文章

      网友评论

          本文标题:IM 小项目总结

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