1. 谈天做事的技能选型

2. 开拓社交app过程中,实现谈天做事踩过的坑

3. 那些著名app的谈天做事

phpopenfire发送图片27app后端搭建聊天办事器的阅历 GraphQL

1. 谈天做事的技能选型

须要开拓谈天做事,首先要选择用到的协议,现在,常用的谈天协议有:

(1)xmpp,一个基于xml的协议,被广泛运用于Gtalk, Facebook,但缺陷也很明显,由于基于xml,会产生大流量。

(2)mqtt,IBM开拓的即时通讯协议,一个大略的协议,须要自己实现加好友,群聊等IM常见的功能

(3)类ActivitySync,微信实现的协议,省流量,性能高,但由于是私有协议,IM的所有功能都须要自己实现。

Xmpp协议作为一个被广泛利用的协议,有大量的网络资料和成熟开源模块,例如在android和ios上,就很方便集成xmpp协议。
IM作为一个繁芜的系统,有方方面面须要考虑,利用成熟的协议,能帮助我们避免很多问题,提高了开拓效率。

同时,xmpp协议的缺陷也很明显,基于xml,造成了费流量。

不信,你瞧:

<iq id=\公众rosterset1\"大众 type=\"大众set\"大众>

<query xmlns=\"大众jabber:iq:roster\"大众>

<item jid=\"大众user@jabbercn.org\"大众 name=\公众user\"大众/>

</query>

</iq>

<presence from=\"大众contact@rooyee.biz\"大众 to=\"大众user@jabbercn.org\"大众 type=\"大众subscribe\"大众/>

上面是xmpp协议添加好友的内容,看到了吗?这么大略的一个功能,用了多少字节!


综合上面所述,对付创业型的公司来说,如果须要在最短韶光内实现谈天功能,除了利用环信,融云等第三方IM做事外,最好是选择xmpp协议。

现在主流的实现了xmpp的两个开源项目:

(1)Ejobberd,用erlang措辞开拓,成熟稳定,集群支持,支持多进程高并发。
但由于它是基于小众的erlang,也造成了很高的开拓本钱,例如,想招个熟习erlang同时也熟习谈天做事的人,很难。

(2)openfire, 用java开拓,成熟稳定,插件多,但是对内存哀求高,并发低,集群支持差,单机的并发就十多万。

在创业公司里,我的建议是利用openfire,毕竟熟习java的开拓职员还是挺多的,而且在初期,也不会有太高的并发,等有钱有人后,再对谈天系统改造。

虽然,作为一名有空想有道德有职业肃静的后端工程师,想把谈天系统做好,但空想是美好的,现实是残酷的。
创业初期的环境,决定了没法打造完善的系统,但最最少,利用openfire能先把谈天功能做出来。

2. 开拓社交app过程中,实现谈天做事踩过的坑

在做第一个社交app中,利用openfire除了常规的谈天外,还须要实现两个功能:

(1)未读数

(2)保存谈天记录

由于当时不具备对openfire进行二次开拓的能力(或者说是由于心存恐怖),采取了一个现在看起来无比傻的方案:

吸收,App端是直接连接openfire做事器;发送,用php封装了干系发送的api,app端通过调用api来发送,在api层来处理”未读数”和”保存谈天记录”。

实现”未读数”的方法:每次app打开或退出前,调用一个api标识该app是否在线并在redis中记录下来,在调用 发送的api时,通过检测一个,判断是否未读(发送离线的便是未读)

实现” 保存谈天记录”的方法:在调用 发送的api时,把发送的异步保存到数据库。

实现了上面两个技能方案,体会到为理解决一个问题引引入了无数的新问题是啥情形了。
”未读数”功能切实其实是噩梦,数字根本不准,特殊是遇上了app闪退,断网的情形下。
这个功能必须要在openfire内部去实现,谈天做事器都有记录干系的用户在线状态的。

在做第二个社交app时,须要实现“发送给ios的离线,用apns推送”这个功能。
我吸取了第一个社交app的教训,采取了开拓openfire插件的方法,把所有发送给ios的离线在openfire内部截获下来,并用队列传送到apns系统中,愉快地办理了这个问题。
末了,把这个插件开源,放到了我的github中(github.com/newjueqi/sendOfflineMsg)

3.那些著名app的谈天做事

Whatsapp:

初期利用开源Ejabberd做事器,利用Erlang实现。
接下来的许多年一贯从事Ejabberd的重写和修正,包括从XMPP转换到内部开拓协议、调度代码库以及重设计一些核心组件,对Erlang VM做了大量的修正以得到高性能。

陌陌:

最初的一年是利用了xmpp,一年后改为私有的协议。

环信:

对xmpp协议进行了改造:

(1)登录握手的改进

(2)心跳的改进

(3)文件传输

(4)在线状态的改造

(5)把谈天室协议改为适宜移动互联网的群聊

陌生人社走运用Whisper中文版“耳语”:

据小道,把xmpp协议中的xml改为json。

-----------------------------------------------

本文是原创文章,作者:曾健生,"大众号ID:appbackend。
如果您转载本文,请附上以上信息,尊重原创。

在后台回答”目录”或者按菜单栏中的”目录”,可查看发布过的所有文章。