框架编写之聊天框架认识(一)

    聊天app软件在市面上已经很普遍也很多(不过牛B的就数qq和微信了大笑)。做过开发聊天app的各位亲,都有这样的痛苦经历抓狂,在原来不错的应用中(或者一开始)老板告诉自己说生气,想在应用添加上聊天的功能,你是不是特别的“想疯惊恐”。为什么 ?因为这个模块太多功能了,单单以私聊(点对点聊天)就有很多东西,例如:聊天的内容分为文本,图片,语音,视屏等等,还有是谁发送的,此外还有群聊等等。各种“坑”在等待你,而你必须掉下去再爬上,把所有坑都走过了,然后才能完成项目,但最后发现原来写的代码是自己已经看不懂的“初恋”害羞

     聊天难道都要经历这样的过程么?-》在自己写完程序后回来看不懂的“初恋”害羞、一大片牛逼的代码给新员工瞻仰和诅咒自己骂人

    不一定哦。

    本系列将从面向对象方面来了解和梳理一部分关于聊天功能的实现。

    今天我将简单说一下聊天中的一些问题。

     第一个问题:协议(如何建立通讯和消息推送机制)

     聊天最早是在短信的基础创建处理。为什么这么说呢?

      大家想一想,短信是通过移动(联通、电信等)供应商进行互通互联发送消息,这些供应商就像聊天软件中的通讯协议,发送短信(app中聊天内容message)给移动(app中的通讯协议),移动公司将自己发送的短信拿来看:谁发的(sender)、给谁发(recipient)、发的什么(messager)。

      现在我们写的app就先最早的手机,只要说我的手机用移动的号,ok想换别的号只能换手机,同样自己现在写的软件,说明了使用那家的通讯就没办法改变,也没想着改变(大不了辞职,重新找工作)。现在手机出现了全网通功能,就是不管你用那家的号码都可以使用,那我们的app是不是也可以实现这个功能呢?只要我们能够搭建好这个框架,以后不管去哪家公司,用什么样的通讯协议,只要调用写好框架,少做修改就可以使用。

       第二个问题:内容(聊天的具体信息Message)

       大家在想一想现在现存的聊天app来看,聊天的方式:私聊、群聊;聊天内容:文本、图片、表情、语音、地图、视频等;发送状态:已发送、发送中、发送失败、发送成功等等。

按照面向对象的思想是否可以将这些共性的东西抽取到一起,在以后使用实现聊天功能时直接拿来使用。

      对于以上两个问题都是对一个的需求,就是需要一份比较完整的聊天框架来解决这些问题。

     一个聊天框架的简历需要大家认识这三个方面的东西:

    第一方面:IM协议(即时通讯协议Instant Messaging,还不懂?百度一下)

     1.1 最基本的就是scoket连接,很痛苦的连接方式

     1.2 xmpp协议:百度去吧,不解释。(特么的太麻烦了)。

     1.3 云推送(百度云,极光,个推,信鸽等等);符合小老板们的需求,可以快速实现聊天服务端搭建和投资小,但规模大后续需要进一步完成自己的平台搭建(不是咱们小员工所考虑)。另外安全问题和聊天私密(互联网聊天有私密可言么?)。

     第二方面:聊天框架的构建。

    1 解决IM协议的变更,由原来的移动版手机变成全网通手机。(当然是基础框架之外)在IM协议发生改变时能最快的,最少,最简洁的方式引入到项目当中。

    2 聊天消息种类和状态等等的整合。

    刚刚上面都说了消息很多,有文本、表情、地图、语音等等。这些都是共性的问题所在,能不能在使用前给大家封装好了,不用再开发时再去算想。

   3 增强可读性。

   这个是框架的生存之道。如果一个框架实现功能特别牛B。但逻辑,代码等一塌糊涂,别人看懂你的逻辑和代码时间差不多自己动手可以实现功能了。程序员何必为难程序员呢。

   4降低耦合度。

    这个可是编程最基本的要求。

   第三方面功能和扩展

  功能方面需要对其分析一下:

  1. 聊天列表、私聊、群聊。缺少了就不是聊天了吧(呵呵)
  2. 多样化的消息类型(txt、image、location、audio、emo、...)(一些未知都有可能)
  3. 消息状态同步(send、failure、success)。呵呵,细节问题的所在,用户体验的追求。
  4. 消息同步机制。发送一条消息是否成功,是否在发送中,一定要在当前界面及时体现出来,甚至每个有关界面都要有相应的动作。
  5. 消息的未读数。(模仿短信读了还是没读呢?一句话用户体验啊)
  6. 消息的收发。(不管什么2B消息,都有发送者,接受者和内容。)
  7. 新消息提醒(notify)。主人来消息了,开来看了....特么的用户体验啊。
  8. 数据库设计。消息么,谁知道用户什么时候看,看的时候有没有网络(所以不能存在网上),所以存在数据库必须的,尤其这种格式化数据。

 对于以上方面需要那些知识点呢?

    1 IM协议(必须讲到,这里使用百度云推送功能)。

    2 观察者模式(据说RxAndroid就是这么牛)。

    3  模块集成。

    4  UnitTest。(不用想了,测试使用)

    5 Service 。 核心控制模块。

    6 封装与扩展(封装:只要面向对象的编程跑不了。扩展:没有扩展能力死的快)。


ok, 大体上本系列要讲的知识点就这么多,不足之处还希望大家多多指导。


 

    



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值