继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何开发一款微信

野火IM
关注TA
已关注
手记 1
粉丝 0
获赞 0

如何开发一款微信

普通的软件公司也可以开发出一套属于自己的"微信"?是的你没有看错,而且很容易很经济,看完这篇文章你就明白了。下面我就讲一下如何实现:

从零开始开发

内行人都明白这是天方夜谭,这对于普通公司是不可能完成的任务,即使经济实力雄厚的公司,拥有强大的团队,也需要大量的时间进行开发,需要大量的时间进行验证,需要大量的用户使用去打磨,没有两三年的时间是不能够成熟的。

注意这里无论你多有钱,无论你投入多少人力,都是需要至少这么多时间的。就如一个孕妇从怀孕到生产需要十个月,找十个孕妇也无法一个月就能生产出一个宝宝来。这里之所以把这个选项列出来的原因就是告诉大家,这条路时行不通的,因为现在还有很多人没有明白这个现实,很多老板和项目经理妄想找个三个人的团队,三个月就要开发出来商用的IM!做出来个玩具是可能的,达到商用级别根本没戏,看看微信团队多少人,开发了多少年就知道了。

借助于云通讯服务商

从零开始是不行的,那就想办法站在“巨人”的肩膀上,只有站得更高,才能看的更远。现在有多家”即时通讯云”服务厂商可以帮你实现这个目录。首先解释一下即时通讯云,就是由即时通讯方面的专业公司,负责IM通讯技术,对于客户来说,既不需要开发IM服务,也不需要运维IM服务器,仅仅使用即时通讯云厂家提供的SDK和API,就能接入进来。现有常见的几家有实力的比如环X、融X和云X。另外腾讯,阿里也都提供类似的服务。一个例子就是曾经风靡全国的子弹短信就是使用的云X的服务,也只有这样才能让老罗在短时间内作出支撑上千万用户的商业产品。

好处是显而易见的,那么有没有什么弊端呢?答案是肯定的,我认为有如下几个方面:

  1. 信息和用户是一个企业的核心资产,放到别人手里,总是那么不让人放心。
  2. 需求是快速变化和多样的,特别是互联网行业,慢一步就是天壤之别,云服务商有没有能力,有多少动力来帮助你实现?
  3. 云通讯服务竞争已到了下半场,到了收获的季节,从最初的免费到现在收费标准一再提高、再提高,相信不少客户都有所体会。
  4. 巨头的云通讯都是边缘产品,边缘产品的命运很难保障。创业公司的死亡率大家也都知道,一旦完蛋,到时候就是叫天天不应叫地地不灵。

据我所知有些有实力的公司在早期确实在使用他们,但都有自己的Plan B,一旦时机成熟,还是部署到自己的机房比较让人放心。普通公司则只能成为任人宰割的羔羊!

使用开源IM

再有就是使用开源的IM。这个就对使用者的开发能力提出一定的挑战。说来很奇怪,开源IM在上古时代(PC时代)就有了一套标准方案,XMPP,进入到移动互联网时代这么久也没有一套标准出来,甚至谷歌/微软/FB/腾讯等巨头连尝试定个标准的努力都没有做过。我猜猜谷歌/微软都是PC时代的霸主,对移动互联网的IM不够重视(Gtalk/Skype都是桌面产物,移动端做的很不好,失败后也没有尝试着开源),至于facebook/腾讯等移动互联网巨头因为有自己的核心产品,更不可能作出个标准来跟大家使用。也有很多次一级别的公司开发出来的成熟商用产品,但由于花费太高不愿意分享。另外也有人说因为互联网时代,节奏太快,大家比着赛跑,也就没有时间坐下来商量一个标准,另外也没指望能够跟友商共存共通,也就没有制定标准的动力了。

这样的结果就是IM的核心技术被垄断在少数几家公司手里,普通公司很难真正拥有这项核心技术。对于这种说法,可能很多人不同意,因为在市场上出售IM服务甚至源码的公司有很多,在github上开源的IM也有非常多,怎么说普通公司很难拥有呢。诚然是有非常多的选项,但是良莠不齐泥沙俱下。因为做IM是一个门槛很低的事,经常有人想要写点东西练练手,那就写个IM吧,甚至有些连个客户端都没有,凭借着漂亮的README和优秀的文笔,就能获得大量的star。但把IM做好又是一件非常难的事情,没有在这个行业中摸爬滚打5年甚至10年以上,没有做过超过一亿以上用户的产品,怎敢说自己的IM做的好!

XMPP是IM的唯一一个标准,诞生于PC时代,使用xml语言,臃肿低效,复杂混乱,互联网巨头也没有把他使用到移动端上进行演进,而是另起炉灶使用起私有协议。可谓先天不足后天失调。但受限于没有可替代方案,还是硬着头皮强推进到移动端,但也有诸多问题,令许多人望而却步。

其他都是各种开源,其中有相当一部分是玩票性质的,功能缺失,没有经过检验,另外可持续性也堪忧。还有一部分是基于XMPP进行二次开发的,先天不足。还有就是使用私有协议,目标是商业化的,但受限于团队能力还有用户基数,产品质量和功能堪忧。当然也有一部分非常优秀的开源IM淹没于汪洋之中,其中野火IM就是其中之一。

野火IM

野火IM团队成立之初就定下了目标,解决上述的痛点,为广大公司和开发者提供低价优质的IM能力。野火IM具有如下特点:

  1. 野火IM团队核心成员都有超过5年甚至10年以上IM从业经验,所做过的产品服务超过一亿人。对于IM来说,支撑100用户和1W用户是不同的难度级别,支撑1W人和一亿人又是更高的难度级别,如果没有相应用户数的支撑,很难或者这方面的经验。

  2. 野火IM纯私有化部署,客户自己部署的服务对我们没有任何的依赖,可以运行在纯内网环境。这样客户就摆脱了对第三方的依赖。

  3. 野火IM的协议比较先进,野火IM基于MQTT协议二次开发而来,序列化使用了protobuf,协议流程参考了邮件协议,确保消息的具有极高的可靠性,不会丢不会重复消息。数据包的冗余非常小,重连重发机制简单可靠,非常适合移动网络的复杂网络环境。

  4. 野火IM客户端使用了mars,mars是微信的核心连接库,经过了十几亿人十年的使用验证,稳定性经得起考验。另外mars针对移动网络做了一系列优化,mars还支持长短连接,既考虑到了IM业务的并发需求,也做到了节省网络资源,此外还有客户端的熔断策略等。此外还参考了WCDB(微信的数据库),在野火IM协议栈内内置了sqlite,确保多平台通用相同的数据处理逻辑,保证各平台的表现一致性。

  5. 野火IM服务端基于moquette,moquette是国外的一款优秀的开源MQTT服务器,具有很高的代码质量,为野火IM的服务端打下坚实的基础。

  6. 野火IM安全性高,野火IM对所有的细节进行了缜密的安全考虑,链路全程使用AES加密,客户端数据库使用sqlcipher进行加密,安全无死角。

  7. 野火IM性能好,IM服务器使用netty,协议简单高效,经过测试单核CPU发送消息量超过1000条/S。专业版服务支持水平扩展,性能也更高,能够支撑千万以上的用户。

  8. 野火IM的功能完善,IM功能接近于微信的IM所有部分,包括单聊/群聊/频道(类似微信公众号),支持单人音视频(多人还在开发中),支持文字消息/图片消息/小视频消息/语音消息/位置消息/文件消息。支持朋友圈。支持离线推送,支持群管理,支持好友关系,支持用户信息托管。另外还支持聊天室功能。

  9. 野火IM使用门槛低,社区版服务器只依赖mysql,只有一个jar包就可运行。专业版也只有不超过5个组件。服务器的维护也非常简单。客户端都是原生语言编写,简单易读,打包二次开发非常容易。客户端进行了分层,把SDK部分加入到客户已有的APP中也非常容易。

  10. 具有较强的扩展能力。野火IM充分考虑到了客户需求的多样性,在设计时设计了客户端分层,自定义消息,服务端api等,这样客户可以把野火IM当成一个完整组件使用,使用服务api及客户端SDK,可以在不改动任何野火IM核心代码的情况下,实现您的业务需求。客户端SDK及服务端API(提供java版本的SDK)在体验上不亚于任何云通讯服务商。使用过云通讯服务的客户一定会非常熟悉。

  11. 野火IM具有全平台能力,支持android/iOS/Web/微信小程序/Windows/Mac。另外linux版本还在开发中。

  12. 野火IM有部分收费项目,是的你没有看错,好东西都是有价格的,只有开发团队有稳定持续的收入才能持续维护下去。特别是一整套商业化级别的IM服务,需要一个较大的团队,需要投入较多的精力才能持续不断地开发下去,如果要是全部免费,正常的公司可能就不敢去使用了,因为随时有一天就可能烂尾了,到时候投入的所有资源都是个问题。当然我们的非常良心价的,社区版服务及移动端全部免费,应用服务、推送服务和机器人服务都免费,正常情况下95%以上用户都不用付费。其他有部分项目收费也都非常亲民,具体价格请见文档

体验野火IM

Talk is cheap,请微信扫码下载体验
图片描述
另外按照快速体验部署在自己服务器上(PC也可以,不一定要在服务器上),再打包移动端,慢慢品味属于您自己的微信吧!

下面发一种我们录制好的gif图。
图片描述

最后

作者与野火IM利益相关,请读者朋友独立思考、辩证看待。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP