27.app后端搭建聊天服务器的经历

         现在,聊天功能已经成了社交app的标配了。但是,众多web开发出生的程序员对聊天相关的服务的不了解,带来了很多开发上的困扰。在这篇文章中,根据下面3个方面,谈谈聊天服务。

 

1.      聊天服务的技术选型

2.      开发社交app中,实现聊天服务踩过的坑

3.      那些著名app的聊天服务

 

 

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。

 

 

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

        本人把网络上发表的一系列“app后端”文章加以整理并增加了运维和架构方面的内容,出版了书籍《App 后台开发运维和架构实践》,该书已在京东,当当和亚马逊上销售。

《App后台开发运维和架构实践》的购买链接

京东

京东 
当当 
亚马逊 
互动出版网 
天猫

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

打开链接  app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生
【QQ】190678908
【app后端qq群】254659220 
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi 


 

 

 

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 微信小程序的php后端搭建,主要分为以下几个步骤: 1. 安装php环境和相关依赖; 2. 配置php环境和相关依赖; 3. 编写后端代码; 4. 部署代码到服务器。 在搭建之前,你需要先确定要使用的php框架和数据库。目前常见的php框架有Laravel、Yii2、ThinkPHP等,而数据库则有MySQL、PostgreSQL等。这里以Laravel和MySQL为例。 1. 安装php环境和相关依赖 这里推荐使用PHP-FPM和NGINX,使用它们可以大大提升php应用的性能和稳定性。在安装完php和 NGINX 后,还需要安装相应的依赖,比如Composer等。 2. 配置php环境和相关依赖 在配置php环境和相关依赖时,需要分别对php、Composer和NGINX进行配置。配置好后就可以进行后端代码的编写。 3. 编写后端代码 使用Laravel框架编写php后端代码,可以利用它丰富的语法和类库,快速地实现业务逻辑。比如,实现用户注册、登录、权限管理等功能。 4. 部署代码到服务器 在开发和测试完成后,需要将php后端代码部署到服务器上。需要将代码和依赖一起打包,上传到服务器上。在服务器上,需要配置好环境、数据库等,然后再启动服务,从而让微信小程序前端可以请求到后端以实现想要的效果。 这是一个较为简单的微信小程序php后端搭建过程,实际操作会因人而异。如果您初次尝试,建议细心阅读相关配置文件和配置文档,以便稳定运行您的小程序。 ### 回答2: 微信小程序的后端搭建需要使用到PHP语言,具体操作流程如下: 首先,需要搭建PHP环境,可以使用工具如WAMP、XAMPP或LAMP等。安装完成后,需要新建一个PHP文件。 接下来,需要引入微信官方提供的SDK,代码如下: require_once "{path}/wechat_sdk.php"; 除了SDK以外,还需要配置一些参数,如appId、appSecret、token、encodingAESKey等。 完成以上步骤后,就可以开始开发后端逻辑了。开发过程中需要调用微信官方提供的api,如获取access_token、获取用户信息等。 在开发过程中,需要注意安全问题,如接口的安全保护、防止SQL注入等。同时,需要对接口进行测试,查看返回数据是否符合预期。 最后,将开发好的后端逻辑部署到服务器上,接着就可以与微信小程序前端进行交互了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newjueqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值