快速了解即时通讯

前言:

有段时间公司要求做一个即时通讯的一个功能,刚拿到这个功能的时候我是一头雾水的,不知道如何做,为了能够有更好的开发思路,我在极客时间上购买了【袁武林】的 即时通讯技术剖析与实战课程。

先来介绍一下袁武林吧!

  来自新浪微博,他主要在微博负责消息箱和直播相关的业务。

 正文:

1.袁老师提出的第一问题: 你知道什么有哪些App 会用到即时消息技术吗?

我们熟知的QQ 微信  抖音 等以外,一些“实时共享”的打车软件,直播软件 也都是通过IM 技术来实现的。

2.IM 主要有哪些应用场景呢?

即时通讯.  用户点对点聊天.  直播互动 .位置共享.以及一些在线网上授课。

3. 如何选择IM呢?

当你百度了一下即时通讯以后,你会发现这个东西很常见,像腾讯 阿里云等都提供了 第三方文档供我们调用,这个是现成的,但是有一点就是收费  ,想要免费的还是只能自己研发,自己研发的成本很高。

无论选择哪一种,都有它的道理。因为应用场景不同,适用的解决方法也不同。


4.搭建一个IM 需要用到哪些技术呢?

其实要搭建一个IM 项目出来,对程序员专业要求还是挺高的,  我们公司即时通讯系统是用netty + websocket 搭建的。

还有哪些知识是必须的呢? 网络 数据库 缓存  加密,消息队列等,还需要考虑高并发的情况。

5.一个完整的IM 技术应该是怎么样的呢?

1.需要有一个用户账号,供用户登录系统,

2.需要查询用户列表,比如加好友等。

3.一个联系人列表,与具体的某个联系人聊天就会产生聊天会话,每个聊天会话的内容应该是独立的,对于消息我们应该是存储在数据库中的,不然一个会话聊天结束的话,这个消息会被清空掉,当然 如果该用户不在线的话,你给离线用户发的消息应该如何处理呢? 留给大家思考

也就是说客户端一般是用户用于收发 消息的终端设备{用户在设备上发消息}  ,客户端内置的客户端程序和服务端进行通信, 

其次是接入服务{为客户端提供消息收发的出入口} ,用户发送的消息 先由客户端通过网络给接入到接入服务,然后再由接入服务交由业务层进行处理。【接入服务主要有四块 功能:连接保持,协议解析 Session维护  消息推送。 ,接入服务承担了一个很重要的功能,是一个双向的关系链,它可以接收客户端传过来的消息,然后将消息交由业务层处理,同时,当服务端有消息需要推送给客户端时,也是将经过业务层处理的消息提交给接入层,再由接入层 通过网络发送给客户端。

之后就是业务处理服务,{更新最近联系人列表等等,主要负责一些逻辑处理}

最后就是存储服务,包括用户列表,用户信息,消息内容都需要存储到数据库中。

第三方接口服务,袁老师提到了一个容易让人忽视的点,就是第三方外部接口服务 {通过手机操作系统自身的公共连接服务来进行操作系统级的“消息推送”,一般是在手机通知栏对用户进行提醒}

举例:安卓手机内置的谷歌公司的 GCM(Google Cloud Messaging)服务

  

6.关于上文中的接入服务和业务处理服务为什么要拆分开来呢?

对于一个IM 系统来说重要的莫过于它的稳定性了,接入层主要是网络设备连接,如果一个聊天系统老是出现连不上网络,网络重连的情况,估计没什么人想用这个系统了,加上后续需求功能是不断增加的,这样会导致每次更新成本很高。  

之前也说过了,接入层主要是负责用户设备和 接收消息的一个入口,那么必然 就要用到通信协议,业务逻辑服务就用来处理业务逻辑,这样就可以提高我们的开发效率,降低业务开发门槛。

7.IM 系统需要做到哪几个点?

1.实时性,点对点聊天 ,你发了一个消息出去,别人等半天才收到,基本上就很难让人再有意愿去聊天。

2.可靠性,主要有俩个点,第一个是 不丢消息【很明显的bug了】,第二个是 消息不重复。

3.一致性,同一条消息在多个用户的聊天界面应该是一致的,比如顺序的一致,内容的一致。

4.安全性,对于用户来说,一个IM 系统需要对用户隐私保护强一点,这就涉及到了消息存储是否安全 以及消息传输是否安全等。

今天先出即时通讯的第一篇,等我再慢慢消化下,第二篇文章再慢慢码出来,对即时通讯比较感兴趣的小伙伴可以到极客时间上学习一下袁老师的课程,课程是文字和 语音并行的,原课程写的更详细,性价比比较高的课程,此课程适合那些对IM 了解不多的人,代码实战比较少,最后有一个netty的实战。

关于netty  ,大家可以去看一下闪电侠的  掘金小册, 我同事入手了一本。感觉很不错。

发布了62 篇原创文章 · 获赞 49 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tangthh123/article/details/104877794
今日推荐