• Android消息推送的服务端


    2、Android消息推送

    MQTT服务器采用mosquito  http://mosquitto.org/

    PHP管理包采用phpmqttclient:https://github.com/tokudu/PhpMQTTClient

    2.1、mosquito安装

    cd /etc/yum.repos.d

    wget http://download.opensuse.org/repositories/home:/oojah:/mqtt/CentOS_CentOS-5/home:oojah:mqtt.repo

    yum update

    yum install mosquitto

    2.2、mosquito命令行使用

    mosquito安装主要包含三个部分:

    mosquitto mosquitto服务器主程序,实现了MQTT协议

    mosquitto_pub mosquitto发布消息的命令行程序

    mosquitto_sub mosquitto订阅消息的命令行程序

    启动mosquitto在前台运行

    mosquitto

    启动mosquitto在后台运行

    mosquitto -d

    启动订阅:

    mosquitto_sub -t hello/world //订阅topic为hello/world的消息,使用默认地址和端口1883

    发布消息

    mosquitto_pub -t hello/world -m “hello,world” //发布topic 为hello/world的消息 “hello,world”

    更多mosquitto命令可以参考

    http://mosquitto.org/documentation/

    2.3、PhpMQTTClient安装

    2.3.1、从https://github.com/tokudu/PhpMQTTClient 下载

    将tokudu-PhpMQTTClient-ba4e494/tokudu-PhpMQTTClient-ba4e494拷贝到服务器对应目录下

    假设为/var/www/html/mqtt,可以通过http://host:port/mqtt访问phpmqttclient

    2.3.2、将index.php的$result = $conn->connect(SAM_MQTT, array(SAM_HOST => ’127.0.0.1′, SAM_PORT => 1883));   修改为

    $result = $conn->connect(SAM_MQTT, array(‘SAM_HOST’ => ’127.0.0.1′, ‘SAM_PORT’ => 1883));

    备注:如果phpmqttclient的http服务器与mosquitto没有安装在同一台服务器,注意将index.php中的127.0.0.1和send_mqtt.php修改成mosquitto的ip地址

    2.3.3、将SAM/MQTT/sam_mqtt.php的SAM_PORT和SAM_HOST也都加上”

    if ($options['SAM_PORT'] == ”) {

    $this->port = 1883;

    } else {

    $this->port = $options['SAM_PORT'];

    }

    if ($options['SAM_HOST'] == ”) {

    $this->host = ‘localhost’;

    } else {

    $this->host = $options['SAM_HOST'];

    2.3.4、服务器测试,测试PhpMQTTClient安装成功

    启动mosquitto在前台运行,以方便获取连接客户端的信息

    mosquitto

    在服务器另外一终端上启动订阅消息的进程,订阅所有tokudu开头topic

    mosquitto_sub  –t  tokudu /+

    注意,此处之所以要使用tokudu,可以看index.php的182行          var target = ‘tokudu/’ + $(‘#messageTarget’).val();

    在mosquitto的终端获得mosquitto_sub客户端的id

    1350006978: New client connected from 127.0.0.1 as mosqsub/8491-localhost..

    访问http://host:port/mqtt ,push notification target字段填写8491-localhost,push notification text填写需要推送的测试消息

    在在mosquitto的终端查看是否收到了推送的消息,如果收到,说明phpmqttclient已经安装配置成功

    2.3.5、android Demo程序安装

    https://github.com/tokudu/AndroidPushNotificationsDemo 下载Android客户端例子,安装到Android,启动后获取客户端的Device Target

    2.3.6、先客户端推送消息

    访问http://host:port/mqtt ,push notification target字段填写Android客户端的Device Target,push notification text填写需要推送的测试消息

    2.4、问题

    1、需要在客户端增加向服务器端上报Device Target的通信报文,服务器端获取客户端的设备信息后存入到数据库中。需要发送消息时候从设备信息表中获取Device Target,然后调用推送接口发送消息,可参考send_mqtt.php

    2、消息队列的持久化及轮询机制,初期可存放到数据库中(参考easy apns),后期放到NOSQL数据库中。需要程序轮询消息队列,获取mosquitto消息队列状态、对未成功发送的消息重试等

    3、大批量消息推送:可能的瓶颈应该主要在mosquitto的处理性能 ,由于是使用C++写的,性能应该可以支撑需要,可以先通过调整mosquitto.conf参数来优化mosquitto的性能。

    4、除了MQTT+Mosquitto外,Apache ActiveMQ/Apollo+MQTT也是值得考虑的方案,ActiveMQ 5.6开始也支持MQTT协议了

    5、之所以选择MQTT而非XMPP协议,可以参考 http://slidesha.re/PrXJvb,值得注意的Facebook Messenger也采用了MQTT协议。有空再单独写一篇关于移动终端消息推送整体架构及选型的方案

    作者:冯亮
             
    能力有限,水平一般。如有错误,欢迎指正
  • 相关阅读:
    用SQL SERVER取分组数据第一条:查出每个班级的成绩第一名
    [转]spring beans.xml
    [转]为什么要使用框架
    MySQL 5.6 for Windows 解压缩版配置安装
    [转]hql 语法与详细解释
    [转]slf4j + log4j原理实现及源码分析
    [转]最详细的Log4j使用教程
    yii2 checkbox 的使用实例
    Magento Order 状态详解
    yii2 设置多个入口文件
  • 原文地址:https://www.cnblogs.com/fengliang/p/3535520.html
Copyright © 2020-2023  润新知