Android应用长连接之后台服务集群开发

移动应用软件有一些是长连接的,而服务器端的集群部署,有的是通过F5把每一次网络请求随机转发到集群中某一台应用服务器上的。要是想把某消息通过集群环境发送到移动端,那么集群中网络请求的随机转发与移动端长连接的特性会有矛盾。

本文以Androidpn(网络协议为XMPP)为例,介绍一种后台集群部署解决移动端与服务器间长连接问题的方法。

 

网络连接示意图:


(上图省去了APN服务器与IME客户端之间的网络层)

网络消息路由:F5APN(x):外部的网络请求会随机发送到集群中的一台APN服务器上。XMPP消息路由:APN01~IME01, APN(x)~IME(x):设备(x)只与一台服务器APN(x)保持长连接,是一一对应的关系。

 

举例说明集群遇到的问题:

    假如APN01与IMEO1保持连接。当有外部网络请求、要向IME01发送消息时,F5首先接到网络请求,并将此请求随机转发给APN服务器,可能是APN02。而此时APN02服务器与IME01没有连接,此请求就无法发送出去了。


解决方法:

    引入Rabbitmq 消息中间件 ,用于APN服务器间的消息转发、通信。每一台APN服务器,通过rabbitmq客户端与rabbitmq服务器进行通信。


引入Memcache存服务器 ,胜于长连接客户端面与服务器的字典表,每次移动端登陆服务器应用时,就把移动端标识与其连接的服务器标识保存在缓存。每一台APN服务器通过MemCache客户端与MemCache服务器进行通信。


接着上一个假设中的问题,APN02在接收到网络请求时,首先拿通过MemCache查询该移动端连接的APN服务器是哪个(MemCache中记录APN01与IMEO1保持连接),若是本机则处理消息,否则就将网络请求的消息发送到Rabbitmq服务器(rabbitmq路由机制及设计方法不是本文的重点),Rabbitmq服务器根据路由,将消息发送给与IMEO1保持连接的APN01服务器上的Rabbitmq客户端。APN01上的Rabbitmq客户端收到消息后进行处理,再调用APNO1与IME01的连接,将消息发送给设备IME01。


发送集群非本节点消息流程图:


附:Androidpn是韩国Sehwan No写的开源消息推送项目,很多大公司都用这个消息推送方式构建自己的消息推送服务,缺点是导致客户端比较耗电。通信机制分别由客户端和服务器完成。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值