开发者自建IM服务器必需要解决的几个问题!

有不少朋友的项目须要用到即时通信,几年前鄙人的项目也是如此,当年没有选择,只能自建了IM服务器,几年下来跨了很多的坑,想一想都甚是后怕。总结此文为后来还想自建IM的朋友提个醒,或许能找到更好的解决之路。html

 

1, 如何应对大并发量链接数据库

本身组建IM服务器,老是要面对大并发量链接的,有些朋友可能会说,咱们用户很少,不须要考虑这个问题,但至少应该将用户控制在一个数量之内,不要让意外增长的用户影响到现有的用户吧。那么一台服务器能够支撑多少链接?又能够支撑多少用户同时发消息?安全

若是须要多台服务器作集群?须要怎么作?架构又是如何的?服务器

这些课题绝对不是几我的短期就能解决的。开发者须要根据项目的具体状况严谨地评估是否能够处理这些问题。网络

 

  

2, 为何老是莫名地断线呢?架构

通常自建IM服务器都会使用现成的openfire等现成的开源部署,通过很多时间部署测试后正常运做。但一到了移动端这种网络至关不稳定的环境后老是会出现各类各样的奇怪问题,费尽力气才发现原来是链接不稳定,常常断线致使的。并发

那么又如何来解决这个问题呢?测试

办法不是没有,只是至关繁琐。须要很长一段时间的评估测试才能解决,甚至会更改原来的一些功能设计。spa

若是你没有精通开源库的专家,要想短期解决这些问题除了花大量时间以外就是使用其它方式巧妙避开它。设计

 

 

3, 为何老是会丢消息?

  丢消息是自建IM服务器常遇到的问题,要解决这个问题也不容易。

移动端的丢消息大概是这个样子。A和B通信,A发了一条消息给服务器,服务器发给B,可是B网络很差掉线了,而服务器殊不知道B退出了(B正常退出会给服务器发下线通知),因此消息丢失了。XMPP中有xep-0184协议(消息回执),A给B发消息,消息体中带一行代码(要求消息回执),当B收到消息后发送一条回执,证实我收到了。后来XMPP又有了xep-0198协议(流管理),断线后快速重链,同时判断必定时间收不到消息,就把消息写离线消息,减小丢消息状况。可是可能网络状况复杂,加上各类不肯定因素,还会出现丢消息的问题。 

  目前比较靠谱的方法就是存全部的聊天记录,由手机端根据时间点去数据库拉消息,只要别人发出的消息就不会丢。这要对即时通信模块进行了相关改动,同时须要注意消息的顺序,拉消息时也尽量只拉取须要的消息,这时须要一个较好的完整同步机制,这个机制推荐参考yun2win的同步机制http://console.yun2win.com/docs/server.html

这里须要花费多少时间成本,能够感觉一下。 

 

 

这里只是列出了比较常出现的几个问题,自建IM服务器成本不小,不论是硬件成本仍是开发成本以及运营风险上。评估本身项目是否须要自建IM服务器通常是如下几种状况:

1,拥有自主的即时通信技术的状况下

2,项目保密性很高,须要绝对保证数据安全

很差意思,在如今PAAS盛行的时代我还真没法想出更多须要自建IM的理由了,以上两点貌似看上对比较立得住脚。

其它第2点提到的数据安全如今好像也不能算是自建IM的理由了,由于市面上已经出现数据和通信分开物理隔离的即时通信云,能够百度下yun2win

总之,自建IM之路坎坷,君请三思而行。 

相关文章
相关标签/搜索