Asynchronous vs synchronous client applications(MQTT)


來自我的CSDN博客

  想查看英文原文的請點擊原文網址。在上兩篇翻譯中,Homejim我給大家分別翻譯了同步客戶端應用程序和異步客戶端應用程序。本人對這兩個的區別也有困惑,因此將paho下的這個比較也看了一下。還是那句話,水平有限,如有翻譯不當之處,歡迎指正。

異步客戶端應用程序 VS 同步客戶端應用程序

  客戶端庫支持兩種操作模式,稱為同步模式和異步模式。如果你的應用程序調用了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來完成此操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM