APP项目开发后台怎样实现推送服务?
推送服务已经成了App必不可少的服务。架设推送服务除了可以使用第三方服务外,也有大量的开源技术可以选择。现在推送服务主要分两块:Android推送和iOS推送,深圳APP开发公司针对这两块分别讲述其架构。
APP开发推送服务功能之Android推送
Android手机由于Audroid系统没有限制,当App进入了后台也能运行服务,所以Android可以基于长连接作推送,这就决定了Android的推送后台和一般基于HTTP的App后台是不一样的,从技术细节上,架构上也不一样。自主研发推送软件对一般的开发者来说有很大的难度,幸运的是现在有开源软件可以实现推送。下面以APP开发公司工程师研究过的开源推送软件“Gopush-Cluster”为例,说明Android推送服务器的架构。
Gopush-Cluster是由措豹移动开源的推送软件,已经被广泛应用于措豹移动下面的业务
·微看、猎豹浏览器热剧推荐,追剧提示;
·游戏的游戏活动推送;
·手机助手App推荐,广告;
·电池医生实时推荐、求生手册的实时消息
·PC毒霸的指令下发(Web换肤,升级提示)、漏洞泡泡等
·PC手机助手实时游戏、广告推荐;
·PC猎豹浏览器上WEB。
APP开发推送功能Gopush-Cluster的架构如图l9-36所示
APP开发推送功能9-36 Gopush-Cluster的架构图
主要分为四个模块来开发:Comet、Message、Web、third-part
Comet的职责
主要负责消息的推送,维护客户端连接。消息是有唯一id号,这个id号是依次自增的。当消息推送后需要在队列中排队,通过PRC传递到Message模块中实现消息的存储。这个模块是有状态的。
Message的职责
主要负责消息的存取。当Message模块接收到Comet模块消息存储的RPC(远程过程调用仂议)请求后把消息持久化(目前开源版本的消息持久化支持MySQL和Redis),同时接收来自Web模块的获取离线消息的请求。这个模块是无状态的,因此可以部署多个Message节点来应对Comet模块的请求和VVeb模块的请求压力。
web的职责
主要负责节点的询问(获取有效的Comet节点IP地址给客户端连接)、获取离线消息、后台节点的管理。节点询问是根据用户的Key使用一致性hash算法计算出该Key应该连接到哪个Comet节点,使用这种策略可以使海量用户均衡地分布到多个Comet节点,提高系统的并发能力获取离线消息时,该模块发送RPC请求到Message节点,获取在持久化设备上的信息。这个模块是无状态的,可以用多个Web节点实现负载均衡和高可用。
thrid-part的职责
系统还使用了Zookeeper实现一个Comet的故障移除和高可用。例如,Comet节点l可以有一个备用节点2节点l在Zookeeper注册为主节点,当节点l宕机后,Zookeeper会选举节点2为可用的节点来提供服务。下面以推送服务中的3个常用场景为例来说明Gopush的工作流程
1.App连接推进服务器的流程
(1)App向web模块发送获取Comet服务器ip的请求
http://test.com/1/server/get?key=Terry22&proto=1
上面各个参数的含义如下。
key:每个App客户端的标识,在Gopush中这个key是允许重复的,因此可实现同账号的多设备登录。这里该App的key是“Terry22”proto,通信所使用的协议.1表示使用WebSocket协议,2表示使用TCP协议。
(2) Web模块从Zookeeper中获取有效的Comet模块信息,并根据一致性hash算法(一致性hash算法的描述请查看本本站缓存架构的演进”这节中的描述)得到该Key应该连接的Comet模块,返回下面的JSON数据给App。
{"ret:0,"
"data":
"server": "183.54.1.1:8065" //IP:Port
}
(3) App从返回的JSON数据中得到Comet模块的IP,使用Comet模块的协议格式连接到Comet模块,这样App就成功连接了推送服务器App连接推送服务器的流程如图9-37所示。好了,APP开发公司本文关于APP项目开发后台怎样实现推送服务的实操经验分享就到这里,谢谢关注,博纳网络编辑整理。