微信服务器及openfire分析

我想做JAVAEE的高手们,特别是写移动服务端的程序猿。都绕不开一个话题。即时通讯。大多数APP现在都内置即时通讯功能


===============  openfire简要分析 ================
我想大部分朋友都是使用 openfire 搭一下万事大吉了吧。 但是不知道各位是否考虑过openfire用于公司生产环境时的劣势。


openfire 的协议是XMPP。XMPP协议的弊端就是传输数据量大。古老的XML为基础的协议(古老不太适合)。并且因其复杂的通讯过程,性能会大大的降低。现在互联网异构编程都是用的JSON。他的轻量相信不用再介绍了吧。


openfire 的核心是使用了mina . mina 的劣势这里也不说。正因为创始人看到了mina的劣势,才会自立门户写出了netty和自己的东西竞争。哈哈 


============ 协议定型 =============


关于协议,这是个很重要的东西,可以说他直接决定性能和稳定性。一个轻量美好的自定义协议,能保证产品的稳定性。说到协议。我们不得不抛弃垃圾似的XMPP,去讨论讨论微信的协议。那是一个经过大考验的协议。


腾讯的协议是基于同步的。基于ActiveSync的修改版。取名叫同步协议Sync。这个协议的过程是怎么样的,说清楚之后就好自己写自己创造了:


需求:
我(A)要向(B) 对方发送一条信息:“你好世界”


过程:
1、我向服务器POST数据 “你好世界”(只是普通的POST)。服务器返回给我一个token:A1。
2、拿着token  向服务器发起TCP传输,推送数据 “A1”
3、服务器通过TCP 向B推送一个消息,“A1”,
4、B收到推送后,GET请求。 token=a1。拿回我发的数据“你好世界”
5、B POST服务器。“我已收到token为a1的消息,可以标记这个消息为已读。”


总结起来是
A POST要发送的数据 --- > 走TCP协议。 通知服务器。我发了一条新信息 ---- > B得到服务器的推送,得知有新消息要去取 -----> B 用GET取消息 ----> B用POST告诉服务器已经成功取回,该条数据可以作废。


以上就是腾讯微信的过程。各位好好看看是可以看懂的。基于同步的协议网上说的太高端化,太学术,难以理解。通俗的就是上面这些。
始终保持双方信息的一致。同步性。TCP在这里的功能并不是推送正常数据(比如“你好世界”) 而只是一个通知而已,不参与正常数据的传输。这样就保证了丢包率大大降低,效率大大提高,稳定性大大提高。具体为什么,自己画出普通的通讯图,画出基于同步的,对比一下就理解了。他是TCP+HTTP 配合的。优点互相补。


================= 技术架构定型  ===============


核心:netty4.x + spring4.x


SOA服务总线:Dubbo 淘宝的技术,很可靠。只说这么多。实现本IM分布式的核心。


消息队列:activeMQ 高速队列。整流作用。


底层数据库:Mongodb 目前网上说的缺点没发现。可能随着版本更新稳定很多了吧。如果业务复杂 推荐mysql+mongodb
mysql做业务还是很方便的。毋庸置疑。但不建议抛弃mongodb。


JSON 转化: fastjson 淘宝的东西。很不错。目前最高效的吧。


日志记录:logback 挺好。比Log4j好使。


====================  代码,我还是希望各位朋友自己先看看上面的文字,自己一定可以写出来一个的。 ==== 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值