想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了...找站长给点建议
新手入门一篇就够:从零开发移动端IM
 
 
阅读(382140) | 评论(162)收藏197 淘帖1 赞34
 
JackJiang Lv.9    3 年前 | |只看大图

一、前言

IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和交流门槛,对各种应用形态产生了深远影响。

做为IM开发者或即将成为IM开发者的技术人员,IM的价值和重要性不言自明。但从技术实现来说,IM系统的开发(尤其是移动端IM)还是存在许多技术难点和坑点的。也正因如此,优质的IM开发资料、实践成果,对于没有太多技术储备的新手来说,尤其难以获得。

本文将以新手的视角引导你阅读相关文章,便于你从零开发一个移动端IM做好方方面面的知识准备:包括但不限于网络编程基础、通信协议的选型、IM的架构设计等等。文笔有限,如有不妥之处还请批评指正,希望对你有用。

另外:如果你是老司机,或觉得本文内容过于庞大,可自行前往即时通讯网收纳整理的技术专辑,选择性地阅读:点击进入技术分类和专辑

* 特别推荐:建议读完本文后,继续阅读本站的几篇实战性即时通讯入门文章《自已开发IM有那么难吗?手把手教你自撸一个Andriod版简易IM (有源码)》、《适合新手:从零开发一个IM服务端(基于Netty,有完整源码)》、《拿起键盘就是干:跟我一起徒手开发一套分布式IM系统》,效果更好。

* 最新修改:2019年10月08日,新增加了“十三、开始动手实践(带参考源码)”章节。

二、读完本文的收获

1您将获得

本文将假设你是毫无技术准备的新手,引导你通过一篇篇精选的文章,了解如何从零开发一个移动端IM所需要的各种技术、资料和实践性代码。

2您无法获得

鉴于IM技术的复杂性,IM开发相关的技术不是一篇文章所能展现的完整,限于篇幅原因本文将不包含任何实践性代码、也尽量不对某项技术作深入的展开,相关的实践性代码、资料、技术详解等请依据本文作者准备的文章逐个深入阅读和学习,而这也恰恰是本文想达到的目的。

三、题外话

随着近两年IM云服务的发展,很多团队基于种种原因,直接选择了短平快的云IM接入APP中。然而,考虑到云IM无论从商业模式还是运营模式上,还需经过多年的沉淀,才可能真正实现客户与服务商的运营和服务良性循环的双赢局面。因则,如何选择云IM服务商,这就是个头疼的问题了,不过这不是本文将要讨论的重点,如果需要,你也可以加入本文提到的讨论交流群,与大家一起交流群: 215891622

好了,以下是正文内容。

四、网络编程理论准备

即时通讯技术归根结底还是网络编程技术的应用,如果您很好奇承载这些网络协议的物理设备是怎么工作的,可以先看看《网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门》。

1UDP、TCP理论基础

我们都知道,IM系统的业务本质就是客户端与客户端进行消息的实时传递,而技术基础就是基于Socket连接的实时数据读写,那么基本的网络编程理论基础是作为新手的你必须掌握的知识点。当然,作为IM开发来说,基础的网络理论就够用了,也没有必要像网络工程师一样精通所谓的OSI七层参考模型。

如果你还不知道什么是UDP、TCP协议,请阅读以下文章:

这几篇文章有助于对UDP、TCP协议建立基本的认识,当然如果时间允许,能全书阅读网络编程理论经典《TCP/IP详解 卷1:协议》则再好不过了。另外,UDP、TCP作为基础计算机数据传输协议,在其之上衍生了很多应用层协议,相关的协议族关系图可以在此文中找到:《计算机网络通讯协议关系图(中文珍藏版)》,可作为您日常的备查手册使用。

2深入理解TCP传输协议

透彻理解TCP传输协议的连接和断开过程非常有助于您日后IM算法的优化和实现,这个过程被形象的总结为“3次握手与4次挥手”。

以下文章有助于您深入理解之:

3深入理解UDP传输协议

相比TCP协议,UDP数据传输协议就显得非常轻量和易于理解,UDP通常被用于需要快速响应的数据传输场景下,对应于IM中的应用形态有:P2P通信、实时音视频等。另外,通常的IM都会被应用于互联网上(而非局域网),那么了解所谓的NAT路由技术原理等,也将有助于您对P2P打洞、UDP端口老化等概念有一个清楚的认知。

以下文章有助于您在接下来开发IM的实际应用中提供一定的实践依据:

4深入理解基于广域网的互联网编程知识

未来您所编写的网络应用程序或产品基本都要运行基于广域网的互联网中(而非单纯而简单的局域网),而广域网因物理网络的复杂性,要编写能适应各种网络拓扑的程序代码,需要过硬的广域网络基础知识,比如NAT路由转发、P2P打洞等等。

下面的文章,有助于您深入理解NAT原理、点对点通信等方面的知识:

P2P技术详解(一):NAT详解——详细原理、P2P简介
P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解(基本原理篇)
P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)
P2P技术详解(四):P2P技术之STUN、TURN、ICE详解

5有关高性能网络编程的知识

实际上,大用户量高并发生产环境下的网络编程,你所开发的产品要想真正堪用并非易事,你很有必要了解高性能网络编程领域所关注的热点问题和努力的方向。

以下是即时通讯网整理的高性能网络编程领域的系列文章:

高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少
高性能网络编程(二):上一个10年,著名的C10K并发连接问题
高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了

好消息是,现时的网络编程为了解决高性能问题,有很多成型的Socket应用层模式存在,比如:NIO、AIO等,文章《Java新一代网络编程模型AIO原理及Linux系统AIO介绍》简单介绍了传统的阻塞式IO、NIO,并着重介绍了最新的AIO技术,如有时间您很有必要予以了解。(更多同类文章:点此进入…

6深入理解移动互联网络的特性

移动互联网络因为无线通信的复杂性:慢、高延迟、易受干扰、带宽窄等特点,使得与传统的有线网络下的应用功能实现有明显差异,您很有必要详细了解一下无线网络方面的特性。

以下文章有助于加深您对移动网络特性的理解:
移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障

7深入学习通信技术物理层(高阶知识,选读!)

如果学完上述各小节里推荐的网络通信应用层知识,还觉得意犹未尽,那么你肯定是万中无一的人才了——是时候开始《IM开发者的零基础通信技术入门》这个高阶知识系列的学习了。

以下文章为IM/推送技术开发的边界知识,有助于你从物理层理解各种网络问题:

IM开发者的零基础通信技术入门(一):通信交换技术的百年发展史(上)
IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)
IM开发者的零基础通信技术入门(三):国人通信方式的百年变迁
IM开发者的零基础通信技术入门(四):手机的演进,史上最全移动终端发展史
IM开发者的零基础通信技术入门(五):1G到5G,30年移动通信技术演进史
IM开发者的零基础通信技术入门(六):移动终端的接头人——“基站”技术
IM开发者的零基础通信技术入门(七):移动终端的千里马——“电磁波”
IM开发者的零基础通信技术入门(八):零基础,史上最强“天线”原理扫盲
IM开发者的零基础通信技术入门(九):无线通信网络的中枢——“核心网”
IM开发者的零基础通信技术入门(十):零基础,史上最强5G技术扫盲
IM开发者的零基础通信技术入门(十一):为什么WiFi信号差?一文即懂!
IM开发者的零基础通信技术入门(十二):上网卡顿?网络掉线?一文即懂!
IM开发者的零基础通信技术入门(十三):为什么手机信号差?一文即懂!
IM开发者的零基础通信技术入门(十四):高铁上无线上网有多难?一文即懂!
IM开发者的零基础通信技术入门(十五):理解定位技术,一篇就够

五、网络编程基础实践

如果你认真读完了上一层的文章,是时候写些代码,来理论联系实际理解Socket通信的原理和实践了。

有关TCP的Socket通信Demo文章和代码:

当然,以上只是随手找的Demo代码,网络上有关TCP数据通信的演示性代码很容易找到,在此就不过多举例了。

本文作者专门编写的有关跨移动端平台的UDP Socket通信Demo:

六、IM到底该用UDP还是TCP协议?

好了,上面的网络编程基础掌握后,就要开始为你的IM进行传输协议选型了。说到IM该用UDP还是TCP作为传输协议,这是个颇有争议的话题,各大社区每当此问题的出现必定是大片的不同声音。

当然,UDP和TCP各有各的应用场景,作为IM来说,早期的IM因为服务端资源(服务器硬件、网络带宽等)比较昂贵且没有更好的办法来分担性能负载,所以很多时候会考虑使用UDP,这其中主要是早期的QQ为代表。

时至今日,TCP的服务端负载已经有了很好的解决方案,加之服务器资源成本的下降,目前很多IM、消息推送解决方案也都在使用TCP作为传输层协议。不过,UDP也并未排除在IM、消息推送的解决方案之外,比如:弱网络通信(包括跨国的高延迟网络环境)、物联网通信、IM中的实时音视频通信等等场景下,UDP依然是首选项。

以下文章或许有助于您对传输层协议的选型:

当然,关于IM到底该选择UDP还是TCP,这是个仁者见仁智者见智的问题,没有必要过于纠结,请从您的IM整体应用场景、开发代价、部署和运营成本等方面综合考虑,相信能找到你要的答案。

七、IM的数据通信格式选型

IM应用开发的前期技术选型时,关于数据通信格式的选择,在同行的眼里,同样是个极富争议的话题。

精略分析一下,究其原因,大概在于以下几点:

  • 可选择的协议或封装格式多种多样:
    可选择的余地大:XMPP、Protobuf、JSON、私有2进制、MQTT、定格化XML、Plain text等等;
  • 同一种格式并不能适用于大多数的场景:
    不同的场景有同的考虑而协议的选择往往跟这挂钩在一起的,如:移动端IM或移动端消息推送的应用场景下如果用XMPP协议,多数情况下都会被喷;
  • 开发者对所选格式有各自的偏好:
    有的人或团队对某种或某几种格式有不一样的经验和技术积累,也促成了他们对某种或某几种协议的偏好。

该选什么样的数据通信格式,同样是跟你的应用场景和使用的架构方案相关联。不过,目前以作者掌握的信息看来,作为需要运行在移动设备的IM,几乎目前所有主流讨论里都不建议使用XMPP协议,具体原因就不在此展开了,下面推荐的文章里会详细为你解答原因。

以下文章会对你的IM的数据通信格式选型有所帮助:

(更多同类文章:点此查看…

八、移动端IM的心跳保活和后台消息推送

1为什么需要心跳保活?

由于移动网络的复杂性,心跳保活对于移动端IM来说显的尤为重要,加之手机省电、省流量策略的设计,如何实现心跳保活则也非常重要,文章《基于TCP协议的移动端IM仍然需要心跳保活机制》或许可以解答你的疑问。

2iOS端的后台消息推送

因为iOS平台的特殊性,iOS应用一旦退到后台,应用本身是无法用代码来实现网络保活的,也就无法自行实现后台消息推送了。

以下文章将有助于你理解iOS平台的后台消息推送原理:

3Android端的心跳保活和后台消息推送

鉴于Android平台众所周之的分化和互不兼容问题,Android端IM在处理心跳保活和后台消息推送时,遇到了不少的麻烦。而且,由于Android应用的生命周期管理是由系统控制,因而如何保证您的IM所在进程或后台服务不被系统杀死,是实现心跳保活和后台消息推送的实现基础。

以下文章可为你的Android端IM的心跳保活和后台推送方案的设计提供参考:

(更多同类文章:此进入…

九、移动端IM系统的架构设计

IM其本质是一套消息发送与投递系统,或者说是一套网络通信系统,归根结底就是两个词:存储与转发。但一个成熟的移动端IM系统要想正常运转,涉及的内容则远不止这些,而最考验技术功底的就是服务端架构的设计与实现。

没有过IM系统开发经验的人,可能对以上观点嗤之以鼻,在此借用TeamTalk的设计者的一段话:“IM服务器开发,从功能抽象的角度看可能非常简单,可以认为是管理大量的客户端连接和在不同的客户端之间传递消息,但具体到实现细节就比较复杂了。打个不恰当的比喻,OS的功能抽象也非常简单,无非是进程间的调度和硬件资源的管理,但要是自己去实现一个,一般人也就只能呵呵了。”

我们以一个典型方案为例,首先来提炼一下一个IM系统的主要需求:包括账号、关系链、在线状态显示、消息交互(文本、图片、语音)、实时视频电话......。

要处理好上述需求,我们通常需要从以下方面进行考量从而设计出合适的架构:

  • 如果采用可靠传输协议TCP,需要考虑到负载问题:短连接实现账号、关系链相关业务,长连接实现上线、信息推送;
  • 后台架构的灵活性、可扩展性:支持分布式部署——把网络层、业务逻辑层、数据层分离,网络层和业务层支持负载均衡策略、数据层支持分布式存储;
  • 客户端SDK的易用性:把网络层、数据层分离、业务逻辑层分离。

另外,一个典型的IM系统架构设计,还有以下性能方面的热点问题需要设计者重点关注:

  • 编码角度:采用高效的网络模型,线程模型,I/O处理模型,合理的数据库设计和操作语句的优化;
  • 垂直扩展:通过提高单服务器的硬件资源或者网络资源来提高性能;
  • 水平扩展:通过合理的架构设计和运维方面的负载均衡策略将负载分担,有效提高性能;后期甚至可以考虑加入数据缓存层,突破IO瓶颈;
  • 系统的高可用性:防止单点故障;
  • 在架构设计时做到业务处理和数据的分离,从而依赖分布式的部署使得在单点故障时能保证系统可用。
  • 对于关键独立节点可以采用双机热备技术进行切换。
  • 数据库数据的安全性可以通过磁盘阵列的冗余配置和主备数据库来解决。

鉴于篇幅有限,架构设计方面的内容本文就不深入展开了。

以下文章将为你的移动端IM的架构设计带来一定的参考意义:

(更多同类文章: 点此进入…

十、移动端IM的通信安全

IM(尤其移动端IM)的安全性一直是开发者需要优先考虑的基础问题,如何正确地理解和使用加密技术则显的尤其重要。IM系统大都采用C/S、B/S、P2P等技术来实现即时通信的功能,软件编制没有统一的标准,使得IM系统本身存有多种安全漏洞,加上用户缺乏安全意识,导致在使用即时通信系统时出现各种安全问题。

当今的计算机密码学的主要作用有:加密( Encryption)、认证(Authentication),鉴定(Identification) 。

加密:防止坏人获取你的数据。
认证:防止坏人修改了你的数据而你却并没有发现。
鉴权:防止坏人假冒你的身份。

这些基本概念和加密算法原理就不在此展开叙述了。

以下文章或许有助于您设计出安全的移动端IM系统:

(更多同类文章:点此进入…

十一、有关IM中的实时音视频技术

IM应用中的实时音视频技术,几乎是IM开发中的最后一道高墙。原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的。实时音视频技术上的实现内容主要包括:音视频的采集、编码、网络传输、解码、播放等环节。这么多项并不简单的技术应用,如果把握不当,将会在在实际开发过程中遇到一个又一个的坑。

以下文章有助于您从零理解IM的实时音视频开发的方方面面:

(更多同类文章: 点此进入…

另外,大家都喜欢开源免费的东西,WebRTC是为数不多的开源且质量上乘的实时音视频解决方案之一,资料如下:

十二、移动端IM开发的其它热点问题

移动端IM开发中还会遇到上述内容未提及的内容,以下文章或许您用的上:

十三、开始动手实践(带参考源码)

十四、推荐技术方案(感谢支持)

1MobileIMSDK工程(已开源)↘

<ignore_js_op>
MobileIMSDK首版开发于2013年(截止2018年2月已更新至v3.2版),它主要使用原生代码编写,应用于非Web网页方式的移动端即时通讯场景下,详细介绍请见:http://www.52im.net/thread-52-1-1.html

2MobileIMSDK-Web工程(捐助作者得精编源码)↘

<ignore_js_op>
MobileIMSDK-Web首版开发于2016年(仍在持续升级中),完全使用JavaScript编写,主要应用于Web网页方式的即时通讯场景下(包括但不限于手机端、PC端的网页聊天或消息推送等),详细介绍请见:http://www.52im.net/thread-959-1-1.html

3RainbowAV工程(捐助作者得精编源码)↘

<ignore_js_op>
RainbowAV是一套完整移动端实时音视频框架(含服务端),支持分布式,不依赖于第3方服务,可私有化部署,使用方便,部署简单,轻量级、模块化设计,开发者可方便修改、演进甚至用于2次开发,详细介绍请见:http://www.52im.net/thread-1027-1-1.html

4RainbowChat产品级移动端IM系统 ↘

<ignore_js_op>
RainbowChat是一套基于MobileIMSDK的产品级移动端IM系统。RainbowChat源于真实运营的产品,运营统计:点此进入,不同于市面上开源或售卖的demo级代码,RainbowChat的产品前身已被成千上万真实的客户使用过,解决了大量的屏幕适配、细节优化、机器兼容问题(可自行下载体验:标准版下载专业版下载),详细介绍请见:http://www.52im.net/thread-19-1-1.html

5RainbowChat-Web产品级Web端IM系统 ↘

<ignore_js_op>
RainbowChat-Web是一套基于MobileIMSDK-Web的网页端IM系统。不同于市面上某些开源或淘宝售卖的demo级代码,RainbowChat-Web的产品级代码演化自真正运营过的商业产品,其所依赖的通信层核心SDK(即MobileIMSDK-Web)已在数年内经过大量客户及其辐射的最终用户的使用和验证。详细介绍请见:http://www.52im.net/thread-2483-1-1.html。RainbowChat-Web是RainbowChat的姊妹产品。

附录1:其它即时通讯文章

[1] 有关WEB端即时通讯开发:
新手入门贴:史上最全Web端即时通讯技术原理详解
Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE
SSE技术详解:一种全新的HTML5服务器推送事件技术
Comet技术详解:基于HTTP长连接的Web端实时通信技术
新手快速入门:WebSocket简明教程
WebSocket详解(一):初步认识WebSocket技术
WebSocket详解(二):技术原理、代码演示和应用案例
WebSocket详解(三):深入WebSocket通信协议细节
WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)
WebSocket详解(五):刨根问底HTTP与WebSocket的关系(下篇)
WebSocket详解(六):刨根问底WebSocket与Socket的关系
socket.io实现消息推送的一点实践及思路
LinkedIn的Web端即时通讯实践:实现单机几十万条长连接
Web端即时通讯技术的发展与WebSocket、Socket.io的技术实践
Web端即时通讯安全:跨站点WebSocket劫持漏洞详解(含示例代码)
开源框架Pomelo实践:搭建Web端高性能分布式IM聊天服务器
使用WebSocket和SSE技术实现Web端消息推送
详解Web端通信方式的演进:从Ajax、JSONP 到 SSE、Websocket
MobileIMSDK-Web的网络层框架为何使用的是Socket.io而不是Netty?
理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性
微信小程序中如何使用WebSocket实现长连接(含完整源码)
>> 更多同类文章 ……

[2] 有关推送技术的文章:
iOS的推送服务APNs详解:设计思路、技术原理及缺陷等
信鸽团队原创:一起走过 iOS10 上消息推送(APNS)的坑
Android端消息推送总结:实现原理、心跳保活、遇到的问题等
扫盲贴:认识MQTT通信协议
一个基于MQTT通信协议的完整Android推送Demo
IBM技术经理访谈:MQTT协议的制定历程、发展现状等
求教android消息推送:GCM、XMPP、MQTT三种方案的优劣
移动端实时消息推送技术浅析
扫盲贴:浅谈iOS和Android后台实时消息推送的原理和区别
绝对干货:基于Netty实现海量接入的推送服务技术要点
移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)
为何微信、QQ这样的IM工具不使用GCM服务推送消息?
极光推送系统大规模高并发架构的技术实践分享
从HTTP到MQTT:一个基于位置服务的APP数据通信实践概述
魅族2500万长连接的实时消息推送架构的技术实践分享
专访魅族架构师:海量长连接的实时消息推送系统的心得体会
深入的聊聊Android消息推送这件小事
基于WebSocket实现Hybrid移动应用的消息推送实践(含代码示例)
一个基于长连接的安全可扩展的订阅/推送服务实现思路
实践分享:如何构建一套高可用的移动端消息推送系统?
Go语言构建千万级在线的高并发消息推送系统实践(来自360公司)
腾讯信鸽技术分享:百亿级实时消息推送的实战经验
百万在线的美拍直播弹幕系统的实时推送技术实践之路
京东京麦商家开放平台的消息推送架构演进之路
了解iOS消息推送一文就够:史上最全iOS Push技术详解
>> 更多同类文章 ……

[3] 更多即时通讯技术好文分类:
http://www.52im.net/forum.php?mod=collection&op=all

附录2:来自IM大厂的精华文章汇总

[1] 有关QQ、微信的技术文章:
微信朋友圈千亿访问量背后的技术挑战和实践总结
腾讯技术分享:腾讯是如何大幅降低带宽和网络流量的(图片压缩篇)
腾讯技术分享:腾讯是如何大幅降低带宽和网络流量的(音视频技术篇)
微信团队分享:微信移动端的全文检索多音字问题解决方案
腾讯技术分享:Android版手机QQ的缓存监控与优化实践
微信团队分享:iOS版微信的高性能通用key-value组件技术实践
微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?
腾讯技术分享:Android手Q的线程死锁监控系统技术实践
微信团队原创分享:iOS版微信的内存监控系统技术实践
让互联网更快:新一代QUIC协议在腾讯的技术实践分享
iOS后台唤醒实战:微信收款到账语音提醒技术总结
腾讯技术分享:社交网络图片的带宽压缩技术演进之路
微信团队分享:视频图像的超分辨率技术原理和应用场景
微信团队分享:微信每日亿次实时音视频聊天背后的技术解密
QQ音乐团队分享:Android中的图片压缩技术详解(上篇)
QQ音乐团队分享:Android中的图片压缩技术详解(下篇)
腾讯团队分享:手机QQ中的人脸识别酷炫动画效果实现详解
腾讯团队分享 :一次手Q聊天界面中图片显示bug的追踪过程分享
微信团队分享:微信Android版小视频编码填过的那些坑
微信手机端的本地数据全文检索优化之路
企业微信客户端中组织架构数据的同步更新方案优化实战
微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉
QQ 18年:解密8亿月活的QQ后台服务接口隔离技术
月活8.89亿的超级IM微信是如何进行Android端兼容测试的
以手机QQ为例探讨移动端IM中的“轻应用”
一篇文章get微信开源移动端数据库组件WCDB的一切!
微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化
微信后台基于时间序的海量数据冷热分级架构设计实践
微信团队原创分享:Android版微信的臃肿之困与模块化实践之路
微信后台团队:微信后台异步消息队列的优化升级实践分享
微信团队原创分享:微信客户端SQLite数据库损坏修复实践
腾讯原创分享(一):如何大幅提升移动网络下手机QQ的图片传输速度和成功率
腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(下篇)
腾讯原创分享(三):如何大幅压缩移动网络下APP的流量消耗(上篇)
微信Mars:微信内部正在使用的网络层封装库,即将开源
如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石 [源码下载]
微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解
微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)
微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)
Android版微信从300KB到30MB的技术演进(PPT讲稿) [附件下载]
微信团队原创分享:Android版微信从300KB到30MB的技术演进
微信技术总监谈架构:微信之道——大道至简(演讲全文)
微信技术总监谈架构:微信之道——大道至简(PPT讲稿) [附件下载]
如何解读《微信技术总监谈架构:微信之道——大道至简》
微信海量用户背后的后台系统存储架构(视频+PPT) [附件下载]
微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案
微信朋友圈海量技术之道PPT [附件下载]
微信对网络影响的技术试验及分析(论文全文)
一份微信后台技术架构的总结性笔记
架构之道:3个程序员成就微信朋友圈日均10亿发布量[有视频]
快速裂变:见证微信强大后台架构从0到1的演进历程(一)
快速裂变:见证微信强大后台架构从0到1的演进历程(二)
微信团队原创分享:Android内存泄漏监控和优化技巧总结
全面总结iOS版微信升级iOS9遇到的各种“坑”
微信团队原创资源混淆工具:让你的APK立减1M
微信团队原创Android资源混淆工具:AndResGuard [有源码]
Android版微信安装包“减肥”实战记录
iOS版微信安装包“减肥”实战记录
移动端IM实践:iOS版微信界面卡顿监测方案
微信“红包照片”背后的技术难题
移动端IM实践:iOS版微信小视频功能技术方案实录
移动端IM实践:Android版微信如何大幅提升交互性能(一)
移动端IM实践:Android版微信如何大幅提升交互性能(二)
移动端IM实践:实现Android版微信的智能心跳机制
移动端IM实践:WhatsApp、Line、微信的心跳策略分析
移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)
移动端IM实践:iOS版微信的多设备字体适配方案探讨
信鸽团队原创:一起走过 iOS10 上消息推送(APNS)的坑
腾讯信鸽技术分享:百亿级实时消息推送的实战经验
IPv6技术详解:基本概念、应用现状、技术实践(上篇)
IPv6技术详解:基本概念、应用现状、技术实践(下篇)
腾讯TEG团队原创:基于MySQL的分布式数据库TDSQL十年锻造经验分享
微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等
了解iOS消息推送一文就够:史上最全iOS Push技术详解
腾讯技术分享:微信小程序音视频技术背后的故事
腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面
>> 更多同类文章 ……

[2] 有关QQ、微信的技术故事:
技术往事:微信估值已超5千亿,雷军曾有机会收编张小龙及其Foxmail
QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年
闲话即时通讯:腾讯的成长史本质就是一部QQ成长史
2017微信数据报告:日活跃用户达9亿、日发消息380亿条
腾讯开发微信花了多少钱?技术难度真这么大?难在哪?
技术往事:创业初期的腾讯——16年前的冬天,谁动了马化腾的代码
技术往事:史上最全QQ图标变迁过程,追寻IM巨人的演进历史
技术往事:“QQ群”和“微信红包”是怎么来的?
开发往事:深度讲述2010到2015,微信一路风雨的背后
开发往事:微信千年不变的那张闪屏图片的由来
开发往事:记录微信3.0版背后的故事(距微信1.0发布9个月时)
一个微信实习生自述:我眼中的微信开发团队
首次揭秘:QQ实时视频聊天背后的神秘组织
为什么说即时通讯社交APP创业就是一个坑?
微信七年回顾:历经多少质疑和差评,才配拥有今天的强大
前创始团队成员分享:盘点微信的前世今生——微信成功的必然和偶然
即时通讯创业必读:解密微信的产品定位、创新思维、设计法则等
>> 更多同类文章 ……

 来源:即时通讯网 - 即时通讯开发者社区!

 

评分

2

查看评分

 

上一篇:Android进程保活详解:一篇文章解决你的所有疑问▪下一篇:58同城网的IM技术架构演变之路 

本帖已收录至以下技术专辑

推荐方案
 
 
评论 162
 
 
2 楼: kezhaoyuan Lv.4   3 年前 |
好全的资料啊
 
 
签名: 该会员没有填写今日想说内容.
 
 
 
 
3 楼: JackJiang Lv.9    楼主 3 年前 |

引用:kezhaoyuan 发表于 2016-08-03 09:17
好全的资料啊

是啊,这样的资料可是不容易找到的

 
 
签名: 《极致优化,iOS版微信编译速度3倍提升的实践总结》http://www.52im.net/thread-2873-1-1.html
 
 
 
满满的干货
 
 
 
 
 
 
 
5 楼: JackJiang Lv.9    楼主 3 年前 |

引用:qianxing 发表于 2016-08-03 13:28
满满的干货

那必须的

 
 
签名: 《极致优化,iOS版微信编译速度3倍提升的实践总结》http://www.52im.net/thread-2873-1-1.html
 
 
 
从这篇文章开始学习im
 
 
签名: 该会员没有填写今日想说内容.
 
 
 
 
7 楼: JackJiang Lv.9    楼主 3 年前 |

引用:木子凤 发表于 2016-08-05 08:18
从这篇文章开始学习im

 
 
签名: 《极致优化,iOS版微信编译速度3倍提升的实践总结》http://www.52im.net/thread-2873-1-1.html
 
 
 
666666
 
 
签名: java
 
 
 
干货啊,尤其是IOS的保活确实让人头疼
 
 
 
 
 
 
干货,最近产品正要添加IM功能,有学习资料了
 
 
 
 
 
 
 
11 楼: JackJiang Lv.9    楼主 3 年前 |

引用:qingwanan 发表于 2016-08-21 15:05
干货,最近产品正要添加IM功能,有学习资料了

 
 
签名: 《极致优化,iOS版微信编译速度3倍提升的实践总结》http://www.52im.net/thread-2873-1-1.html
 
 
 
 
12 楼: otnp Lv.1 3 年前 |
太感谢了这么丰富的资料,十分感谢
 
 
签名: asdf
 
 
 
 
13 楼: JackJiang Lv.9    楼主 3 年前 |

引用:otnp 发表于 2016-08-23 14:20
太感谢了这么丰富的资料,十分感谢

希望对你有用 !

 
 
签名: 《极致优化,iOS版微信编译速度3倍提升的实践总结》http://www.52im.net/thread-2873-1-1.html
 
 
 
篇篇都是经典啊
 
 
 
 
 
 
 
15 楼: JackJiang Lv.9    楼主 3 年前 |

引用:yijunsign 发表于 2016-08-23 20:16
篇篇都是经典啊

过奖

 
 
签名: 《极致优化,iOS版微信编译速度3倍提升的实践总结》http://www.52im.net/thread-2873-1-1.html
 
 
 
 
16 楼: sip Lv.4 3 年前 |
总结得十分详细,十分感谢!楼主创建的这个网站太棒了!
 
 
 
 
 
 
好东西,想学习
 
 
 
 
 
 
十分感谢~~~
 
 
 
 
 
 
写的,太好了。
 
 
签名: 遇见
 
 
 
顶一个
 
 
 
 
 
 
 
 
 

即时通讯网 

实时推送、IM等即时通讯相关技术的学习、交流与分享的平台。专业的资料、专业的人、专业的社区!让即时通讯技术能更好传播与分享。

平等 开放 分享 传承

商务/合作:business@52im.net
投稿/报道:contact@52im.net

手机访问本站

微信公众号new

Copyright © 2014-2019 即时通讯网 - 即时通讯开发者社区 / 版本 V4.3

苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)

《IM开发新手入门一篇就够:从零开发移动端IM》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 修改IE默认页的指向

    方法一: 1.打开IE浏览器 → 单击 工具 → Internet选项 2.填上你要设置的主页网址 3.重启IE浏览器,成功设置主页 方法二: 1.按住键盘"win+r" → 输入 ...

  2. C# 几种常见数据结构

    一.内存上连续存储,节约空间,可以索引访问,读取快,增删慢 Array:在内存上连续分配的,而且元素类型是一样的,可以坐标访问;读取快--增删慢,长度不变 { //Array:在内存上连续分配的,而且 ...

  3. Docker入门-笔记-1

    Docker入门 Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注.如果你关注最新的技术发展,那么你一定听说过 Docker.不管是云服务还是微服务(Mi ...

  4. Linux中环境变量相关文件的区别

    Linux下各种不同环境变量相关文件的作用: 1. /etc/environment  设置整个系统的环境,系统启动时,该文件被执行. 2. /etc/profile     设置所有用户的环境,当用 ...

  5. go笔记--rpc和grpc使用

    目录 go笔记--rpc和grpc使用 rpc server.go client.go (sync) client.go (async) grpc protoc server.go client.go ...

  6. 获取本机的IP地址

    /// <summary> /// 获取本机IP地址 /// </summary> /// <returns>本机IP地址</returns> publ ...

  7. 使用VeeValidate的data-vv-scope指定验证范围

    <div class="login" v-show="activeTab === 1"> <div class="panel-con ...

  8. 深度好文:PHP写时拷贝与垃圾回收机制(转)

    原文地址:http://www.php100.com/9/20/87255.html 写入拷贝(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略.其核心思想是,如果有多个调用 ...

  9. flex招式心法

    flex布局绝对是我们平常在布局中用的最多的一个属性,我们来看看它在can i use中的浏览器支持度:(截止到2019/11/16) 挖藕,凹森!支持度居然这么好,好到连ie也能支持大部分的flex ...

  10. GO基础之接口

    一.概念1. 面向对象语言中,接口用于定义对象的行为.接口只指定对象应该做什么,实现这种行为的方法(实现细节)是由对象来决定.2. 在Go语言中,接口是一组方法签名. •接口只指定了类型应该具有的方法 ...