Android消息推送的服務端

2、Android消息推送php

MQTT服務器採用mosquito  http://mosquitto.org/html

PHP管理包採用phpmqttclient:https://github.com/tokudu/PhpMQTTClientandroid

 

2.1、mosquito安裝git

cd /etc/yum.repos.dgithub

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

yum update服務器

yum install mosquitto架構

 

2.2、mosquito命令行使用ide

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、問題

一、須要在客戶端增長向服務器端上報Device Target的通訊報文,服務器端獲取客戶端的設備信息後存入到數據庫中。須要發送消息時候從設備信息表中獲取Device Target,而後調用推送接口發送消息,可參考send_mqtt.php

二、消息隊列的持久化及輪詢機制,初期可存放到數據庫中(參考easy apns),後期放到NOSQL數據庫中。須要程序輪詢消息隊列,獲取mosquitto消息隊列狀態、對未成功發送的消息重試等

三、大批量消息推送:可能的瓶頸應該主要在mosquitto的處理性能 ,因爲是使用C++寫的,性能應該能夠支撐須要,能夠先經過調整mosquitto.conf參數來優化mosquitto的性能。

四、除了MQTT+Mosquitto外,Apache ActiveMQ/Apollo+MQTT也是值得考慮的方案,ActiveMQ 5.6開始也支持MQTT協議了

五、之因此選擇MQTT而非XMPP協議,能夠參考 http://slidesha.re/PrXJvb,值得注意的Facebook Messenger也採用了MQTT協議。有空再單獨寫一篇關於移動終端消息推送總體架構及選型的方案

相關文章
相關標籤/搜索