1. 程式人生 > >使用MQTT協議的訂閱釋出模式,實現從伺服器推送訊息到客戶端功能。

使用MQTT協議的訂閱釋出模式,實現從伺服器推送訊息到客戶端功能。

3、手機端設定相同的連線主題引數,訂閱訊息。

關鍵程式碼:

PC端

//伺服器埠 賬號 密碼 private String host = "tcp://127.0.0.1:61613"; private String userName = "admin"; private String passWord = "123";

//客戶端物件、主題、釋出訊息、共同主題 private MqttClient client; private MqttTopic topic; private MqttMessage message; private String myTopic = "test/topic";

//建立客戶端 client = new MqttClient(host, "Server", new MemoryPersistence());

private void connect() {
//設定連線引數
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(false);
options.setUserName(userName);
options.setPassword(passWord.toCharArray());
// 設定超時時間
options.setConnectionTimeout(10);
// 設定會話心跳時間
options.setKeepAliveInterval(20);
try {
//設定客戶端回掉
client.setCallback(new MqttCallback() {


@Override
public void connectionLost(Throwable cause) {
System.out.println("connectionLost-----------");
}


@Override
public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("deliveryComplete---------"
+ token.isComplete());
}


@Override
public void messageArrived(String topic, MqttMessage arg1)
throws Exception {
System.out.println("messageArrived----------");


}
});


topic = client.getTopic(myTopic);
System.out.println("------topic=" + topic.toString());

message = new MqttMessage();
message.setQos(1);
message.setRetained(true);
System.out.println("------ratained狀態" + message.isRetained());
message.setPayload("msg-hnac".getBytes());
//連線
client.connect(options);
} catch (Exception e) {
e.printStackTrace();
}

}

手機端也類似,配置相同的IP和埠,設定連線引數之後,需要進行訂閱:

            // 訂閱主題

            client.subscribe(PushConfig.myTopic, 1);

然後PC端delivery後,手機端arrived, 實現推送接收功能。