IM之Qunar实现

本文介绍了Qunar如何基于XMPP协议实现办公和客服IM系统,选择ejabberd开源项目并针对XMPP的缺点进行改进,如使用protocol buffer减少流量。文章详细阐述了协议选择、架构设计、ejabberd的扩展以及系统优化,确保了消息的实时性、可靠性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刘帆

2015年5月加入去哪儿网IM团队,主要负责办公IM和客服IM的系统开发和架构设计。擅长使用Erlang语言开发高并发、高可用的应用服务。致力于可扩展的IM系统,模块化组件,使用一套服务实现办公、客服、消息推送等多种功能。

Qunar由于业务上对 IM 系统的需求,以及对 IM 需要支持的功能和扩展,结合市面上已有的 IM 的实现,实现了自己的一套完善的办公 IM 和客服 IM 系统。具备了以下几个重要特点:实时性,可靠性,一致性,安全性,扩展性,高并发。


1. IM 是什么

IM(Instant messaging)是一种通过网络提供实时消息传输的在线沟通技术。IM 系统一般包括:IM 客户端、 IM 服务器、网络以及在他们之间传输的消息。

整个流程类似于我们寄送包裹:用户A(客户端)将写有发件人和收件人的包裹(消息)给到邮局(服务器),邮局(服务器)根据包裹(消息)上收件人的信息,将包裹(消息)发送给用户B(客户端),完成整个消息的传输。

大家常见的 IM 实现:
请添加图片描述

2. IM 常见实现方案

XMPP 协议

XMPP 是一个开放式的 XML 协议,设计用于准实时消息和出席信息以及请求-响应服务。

XMPP 协议单元包括三个大类:

Presence:Presence 决定了 XMPP 实体的状态,用来告诉服务器该实体是在线、离线或者繁忙;

Message:用户之间发送和接收的消息;

IQ:请求-响应类型的报文;

优点:XMPP 有大量的优秀实现,且社区环境良好,功能和扩展能力丰富。

缺点:报文较大,耗费网络流量和电量。

MQTT 协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 在1999年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT 是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT 协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。正是由于它的简单,也带来了他的缺点:需要自己去实现聊天,好友等IM的逻辑。

3. Qunar 实现

请添加图片描述

协议的选择

基于上面调研的常用 IM 协议,我们最终选择了 XMPP 协议最为最开始的实现协议:

因为可以用最小的开发工作来实现基本的聊天功能;

可以使用已有的扩展插件,更快实现更多的功能;

针对 XMPP 的缺点,做针对性的修改,将网络传输这一阶段,改成 protocol bu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值