來自個人CSDN博客html
想查看英文原文的請點擊原文網址。在上兩篇翻譯中,Homejim我給你們分別翻譯了同步客戶端應用程序和異步客戶端應用程序。本人對這兩個的區別也有困惑,所以將paho下的這個比較也看了一下。仍是那句話,水平有限,若有翻譯不當之處,歡迎指正。安全
客戶端庫支持兩種操做模式,稱爲同步模式和異步模式。若是你的應用程序調用了MQTTClient_setCallbacks(),則客戶端將會進入異步模式,不然會以同步模式運行。服務器
同步模式下,客戶端應用程序運行在單個線程上。信息的發佈使用MQTTClient_publish()和MQTTClient_publishMessage()函數。爲了肯定Qos1和Qos2(詳見Quality of service)的信息已經成功傳遞,應用程序必須調用MQTTClient_waitForCompletion()這個函數。一個展現同步發佈的例子可查看Synchronous publication example。同步模式下接收信息使用 MQTTClient_receive()函數,客戶端應用程序必須相對頻繁地調用 MQTTClient_receive()或MQTTClient_yield(),以便容許(執行)確認和保持與服務器的網絡鏈接的 MQTT "ping"這些操做。網絡
異步模式下,客戶端應用程序運行在若干個線程上。如同同步模式,(異步模式中)主程序調用客戶端庫中的函數來發布和訂閱,而在在後臺進行握手和維持網絡鏈接這些操做。客戶端應用程序經過調用 MQTTClient_setCallbacks()( (詳情請見MQTTClient_messageArrived(), MQTTClient_connectionLost()和 MQTTClient_deliveryComplete()))來使用庫進行回調註冊而得到狀態通知和消息接收。然而, 這個 API 不是線程安全的-不可能從多個線程調用它而不進行同步。你能夠使用MQTTAsync API來完成此操做。eclipse