IM(即时消息)学习笔记

IM(即时消息)学习笔记

实习的组里做的是IM即时消息方面的业务 这篇笔记主要是记录一下自己对于IM的学习

IM系统的架构设计

1.网络传输协议的选择

IM系统传输即时消息无外乎使用UDP、TCP、基于TCP的http这几种协议中的一种或几种。比如QQ主要采用UDP协议,MSN主要采用TCP协议,而且他们也都支持HTTP协议的代理模式。

  • UDP协议实时性更好,但是如何处理安全可靠的传输并且处理不同客户端之间的消息交互是个难题,实现起来过于复杂;
  • HTTP协议属于扩展支持,我们在产品的初始阶段可以不用支持;
  • 那就非TCP协议莫属了,要考虑的同样也有很多,特别是如果有海量用户的需求。如何保证单机服务器高并发量,如何做到灵活,扩展的架构。
2.数据通信格式的选择

即时通讯应用(包括IM聊天应用、实时消息推送应用等)开发的前期技术选型时,关于数据传输格式的选择,在即时通讯开发者同行的眼里,是个极富争议话题。

可选择的余地很大:XMPP、Protobuf、JSON、私有2进制、MQTT、定格化XML、Plain text等等;

协议的选取和使用场景是挂钩的 不存在最好的数据传输格式 只有最适合的。

2.1数据格式需要考虑的方面
1.占用带宽 传输效率
2.网络数据安全性
3.编码复杂程度
4.协议的通用性
2.2不同的数据传输协议(格式)的比较
1.自定义二进制

优点:信息体积小,对应以上”1“
缺点:编码复杂度高(自己定义消息格式,自己编写序列化和反序列化方法,自己进行容错处理,可扩展性不强,比如添加个字段,就必须改两端的逻辑处理),对应以上”3“;

2.提供序列化和反序列化库的开源协议

比如 谷歌的protocol buffers, json, Thrift
优点:是一种流行的通用数据格式,扩展相当方便,序列化和反序列化相当方便(有相应库),错误处理方便(库支持)。

3.文本化协议

比如xml,json
优点:序列化,反序列化容易(库支持),调试方便,可视化强;
缺点:相对于二进制存储占用体积大。

携程IM使用XMPP协议

可扩展通讯和表示协议(XMPP):用于流式传输准实时通信、表示和请求 - 响应服务等的 XML 元素。XMPP 基于 Jabber 协议,是用于即时通讯的一个开放且常用的协议。尽管 XMPP 没有被任何指定的网络架构所融合,它还是经常会被用于客户机 / 服务器架构当中,客户机需要利用 XMPP 协议通过 TCP 连接来访问服务器,而服务器也是通过 TCP 连接进行相互连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值