微信消息传输机制

微信消息是一种即时通讯;消息即时传递和用户交互性。

即时通信原理

即时通信是一种基于网络 的通信技术, 涉及到IP/TCP/UDP/Sockets、P2P、C/S、多媒体音视频编解码/传送、Web Service等多种技术手段。无论即时通信系统的功能如何复杂,它们大都基于相同的技术原理,主要包括客户/服务器(C/S)通信模式和对等通信(P2P)模式。(来自百度文库)这里主要说说C/S架构的通讯模式(微信就是基于这种模式)。 

如图,假设一种情景。用户A登录微信后,连接到IM服务器(即微信通讯服务器),同时用户B也登录上来了。用户A要给用户B发送一条消息,这个消息会先发送到IM服务器,再由IM服务器发送给B。用户A并没有直接和用户B建立连接的。这个消息数据包里面包含了哪些信息呢?必须要告诉IM服务器,这个消息是发给谁的,即用户B。用户B要发送消息给用户A同样的原理。

      说说消息内容,数据包的消息不可能是明文直接发送的。那样的话,别人拿到数据包后,直接可以读取到消息内容,这样也就太不安全了。必须经过加密,是的。用户A和用户B都具有加密解密的功能。用户A在发送之前把消息加密处理,封装成数据包发给服务器,服务器解密读取要发送的用户,即用户B。然后再把用户A的加密数据包发给B。这样简单的通讯就完成了,当然,事实中要比这复杂百倍。

      图片,语音,视频这些消息发送与简单的消息发送稍微复杂一点。即用户A要给用户B发送一段语音。首先这段语音它是个文件,用户A会先把这个文件上传到文件服务器(不是IM服务器,它是专门存放临时文件的服务器),文件服务器返回给用户A这个语音文件在服务器上的地址,用户A再把地址封装起来,通过IM服务器发送给用户B。用户B拿到数据包后,发现是语音文件,会根据地址去文件服务器上下载下来,这样一段语音就发送到用户B 了。图片,视频以及文件都可以这样传输。

    安装完微信并注册后,使用微信时,应先登录:
     不管UDP还是TCP,最终登陆成功之后,微信都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000 。因此,假如你所在的网络开放了80端口,但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功微信的。
聊天消息通信
    采用 UDP 协议,通过服务器中转方式。因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。UDP协议是不可靠协议,它只管发送,不管对方是否收到的,但它的传输很高效。但是,作为聊天软件,怎么可以采用这样的不可靠方式来传输消息呢?于是,腾讯公司采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到 “消息发送失败”但对方又收到了这个消息的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的。

IM系统中最核心的部分是消息系统,消息系统中最核心的功能是消息的同步和存储:

1)消息的同步:将消息完整的、快速的从发送方传递到接收方,就是消息的同步。消息同步系统最重要的衡量指标就是消息传递的实时性、完整性以及能支撑的消息规模。从功能上来说,一般至少要支持在线和离线推送,高级的IM系统还支持『多端同步』;

2)消息的存储:消息存储即消息的持久化保存,这里不是指消息在客户端本地的保存,而是指云端的保存,功能上对应的就是『消息漫游』。『消息漫游』的好处是可以实现账号在任意端登陆查看所有历史消息,这也是高级IM系统特有的功能之一。

本文内容主要涉及IM系统中的消息系统架构,探讨一种适用于大用户量的消息同步以及存储系统的架构实现,能够支持消息系统中的高级特性『多端同步』以及『消息漫游』。在性能和规模上,能够做到全量消息云端存储,百万TPS以及毫秒级延迟的消息同步能力。

详情请看作者原文链接:
链接:https://www.jianshu.com/p/fc9cfa4b34b0
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值