挤公交忘穿内裤被挺进,國產日韓亞洲精品AV,午夜漫画,china中国gary廖男男

MQTT和Websocket的區別是什么

MQTT和Websocket的區別是什么

MQTT 是輕量級基于代理的發布/訂閱的消息傳輸協議,設計思想是開放、簡單、輕量、易于實現。這些特點使它適用于受限環境。例如:

①網絡代價昂貴,帶寬低、不可靠②在嵌入設備中運行,處理器和內存資源有限。

該協議的特點有:

①使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合。

②對負載內容屏蔽的消息傳輸。

③使用 TCP/IP 提供網絡連接。

④有三種消息發布服務質量:

⑤至多一次,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用于如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。

⑥至少一次,確保消息到達,但消息重復可能會發生。

⑦只有一次,確保消息到達一次。這一級別可用于如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。

⑧小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量。

⑨使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制。

WebSocket則提供使用一個TCP連接進行雙向通訊的機制,包括網絡協議和API,以取代網頁和服務器采用HTTP輪詢進行雙向通訊的機制。

本質上來說,WebSocket是不限于HTTP協議的,但是由于現存大量的HTTP基礎設施,代理,過濾,身份認證等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP連接建立后的握手消息是基于HTTP的,由服務器判斷這是一個HTTP協議,還是WebSocket協議。 WebSocket連接除了建立和關閉時的握手,數據傳輸和HTTP沒丁點關系了。

由此可知兩者的應用場景不一樣:

MQTT是為了物聯網場景設計的基于TCP的Pub/Sub協議,有許多為物聯網優化的特性,比如適應不同網絡的QoS、層級主題、遺言等等。

WebSocket是為了HTML5應用方便與服務器雙向通訊而設計的協議,HTTP握手然后轉TCP協議,用于取代之前的Server Push、Comet、長輪詢等老舊實現。

兩者之所有有交集,是因為一個應用場景:如何通過HTML5應用來作為MQTT的客戶端,以便接受設備消息或者向設備發送信息,那么MQTT over WebSocket自然成了最合理的途徑了。

怎么將消息發送到mqtt代理服務器

通過Cocoa Pods添加MQTTKit

MQTTKit在github上鏈接,down下來。

cd到工程目錄,輸入pod install,用xcode打開工程的打開xcworkspace擴展名的文件。

如果不是MQTTKit存在更新的版本,則輸入pod update。

新建一個MQTT的服務請求

NSString *clientID = ...

MQTTClient *client = [[MQTTClient alloc] initWithClientId:clientID];

發送消息,每次發送消息包括目標host和本地MQTT消息.具體MQTT格式消息見代碼。這里Host可以是Server的IP,不需要host表解析。

// connect to the MQTT server

[self.client connectToHost:@iot.eclipse.org

completionHandler:^(NSUInteger code) {

if (code == ConnectionAccepted) {

// when the client is connected, send a MQTT message

[self.client publishString:@Hello, MQTT

toTopic:@/MQTTKit/example

withQos:AtMostOnce

retain:NO

completionHandler:^(int mid) {

NSLog(@message has been delivered);

}];

}

}];

訂閱主題并接受MQTT格式的消息,這部分在viewdidload中實現。

// define the handler that will be called when MQTT messages are received by the client

[self.client setMessageHandler:^(MQTTMessage *message) {

NSString *text = [message.payloadString];

NSLog(@received message %@, text);

}];

// connect the MQTT client

[self.client connectToHost:@iot.eclipse.org

completionHandler:^(MQTTConnectionReturnCode code) {

if (code == ConnectionAccepted) {

// when the client is connected, subscribe to the topic to receive message.

[self.client subscribe:@/MQTTKit/example

withCompletionHandler:nil];

}

}];

斷開連接

[self.client disconnectWithCompletionHandler:^(NSUInteger code) {

// The client is disconnected when this completion handler is called

NSLog(@MQTT client is disconnected);

}];

整個連接建立、發送消息、接受消息、斷開連接都是通過Block的消息機制來實現,因此需要對block有很好地理解。

主站蜘蛛池模板: 博白县| 鸡泽县| 沾化县| 类乌齐县| 会泽县| 庆元县| 桦川县| 门头沟区| 靖安县| 平原县| 雷波县| 图片| 新邵县| 嘉善县| 西昌市| 师宗县| 高台县| 济南市| 炉霍县| 堆龙德庆县| 武清区| 潮安县| 钟祥市| 马山县| 新巴尔虎左旗| 万源市| 连州市| 绥阳县| 涟水县| 高淳县| 长治市| 道真| 迭部县| 绥江县| 乌兰察布市| 运城市| 特克斯县| 鄂托克旗| 西乡县| 河池市| 瑞安市|