消息推送

系统的总体架构图

故障报警推送主要由服务器端和移动端两部分组成。服务器端主要应有获取解析设备报警、管理移动端连接、推送信息以及提供接口等功能。
移动端的主要功能是接受来自服务器端的消息并进行解码。然后将消息发送至APP。最后将对应消息反馈给服务器。

当故障设备需要将报警信息传送至移动端的智能门店管理系统APP时,首先应通过对应的接口将数据传送至服务器。服务器端获取数据后根据要求建立对应的用户连接;接着服务器端将报警信息进行编码,最后通过I/O处理器将消息发送至移动端。移动端接收到报警信息后,通过编解码器解析消息,并通过Broadcast传送至智能门店管理系统APP。从而完成了报警信息推送的整个流程。

移动端的结构图如图所示。
连接管理主要有I/O管理、编解码器和长连接。长连接通过心跳包来实现,智能门店管理系统定时向服务器端发送心跳包,当心跳包发送失败,说明连接断开,此时会启动重连机制重新与服务器连接。
App接口是智能门店管理系统与推送系统的接入点,智能门店管理系统通过调用该接口获取来自服务器端发送的数据,并通过此接口传送反馈信息至服务器端。
网络监控模块用于监控移动网络,当网络存在时移动端将及时通知连接管理与服务器连接。尽可能的保证了消息的及时性。

连接、发送消息

智能门店管理系统App通过ServiceManager启动消息推送平台移动端,ServiceManager将连接的任务交给NotificationService,接着NotificationService调用XMPP连接的管理器XMPPManager。 

1.连接的实现
连接服务器要用到asmack类库所提供的XMPP连接XMPPConnection,XMPPConnection为一个封装了底层Socket连接的类,同时绑定了数据包的读写器(PacketReader,PacketWriter)。ConnectTask线程会调用XMPPConnection根据给定的服务器参数来完成连接。

public class XMPPConnection extends Connection{
    PacketWriter packetWriter;
    PacketReader packetReader;
    packetWriter=new PacketWriter(this);
    packetReader=new PacketReader(this);
    private void connectUsingConfiguration (ConnectionConfiguration config)throws XMPPException{
    //获取服务器
    String host = config.getHost();
    //获取端口
    int port = config.getPort();
    //如果没有已存在的socket
    if(config.getSocketFactory()==null){
        this.socket = new Socket(host,port);
        }else{
        this.socket = config.getSocketFactory().createSocket(host,port);
        }
    }
}

底层的连接是基于TCP/IP协议的socket连接。至此我们完成了和服务器端的连接。

连接成功以后,形成了一个客户端到服务器之间的通道,这个通道就是socket连接,这个连接被封装成了XMPPConnection,我们便可以通过这个通道与服务器进行通讯。

4.返回信息的实现
移动端通过继承asmack类库的IQ基类来封装自己的数据,然后在XMPPManager中获取连接并用编解码器完成对数据的封装,然后通过PacketWriter将数据发送给服务器端。例如封装一个确认消息Confirmation。

public class Confirmation extends IQ{}

接受消息

长连接的实现

消息解析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值