MQTT 입문 (10) - MQTT 와 WebSocket
5822 단어 사물 인터넷
MQTT 본 성 은 WebSocket 과 아무런 관계 가 없 지만 Broker 는 WebSocket 에 있 는 MQTT 가방 을 처리 할 수 있 습 니 다.
[img]http://dl2.iteye.com/upload/attachment/0128/4477/d794a0f9-49a8-35cf-a0c5-83f9ca280631.png[/img]
[b] Mosqiutto Broker [/ b] 설정
/etc/mosquitto/mosquitto.conf
listener 1883
protocol mqtt
listener 9001
protocol websockets
서버 를 다시 시작 하면 Broker 는 두 가지 접근 형식 을 동시에 지원 합 니 다.
[quote]tcp://localhost:1883
ws://localhost:9001[/quote]
[b] 테스트 코드 [/ b]
mosquitto 와 paho 는 이미 이 부분 코드 를 봉 하여 직접 다운로드 하여 사용 하면 된다.
[b]ws.html[/b] http://mosquitto.org/js/mosquitto-1.1.js
<br> var mosq = null;<br> var url = "ws://localhost:9001/";<br> var topic = "test/rensanning/ws";<br> var time = 0;<br> function conn() {<br> if ("WebSocket" in window) {<br> console.log("WebSocket is supported by your Browser!");<br> mosq = new Mosquitto();<br> mosq.connect(url);<br> mosq.onconnect = function(rc) {<br> console.log("CONNACK " + rc);<br> };<br> mosq.ondisconnect = function(rc) {<br> console.log("Lost connection");<br> };<br> mosq.onmessage = function(topic, payload, qos) {<br> console.log("PUBLISH " + topic + " " + payload);<br> };<br> } else {<br> console.log("WebSocket NOT supported by your Browser!");<br> }<br> }<br> function sub() {<br> mosq.subscribe(topic, 0);<br> }<br> function pub() {<br> time = time + 1;<br> var msg = "ws test by mosquitto-1.1.js. " + time;<br> mosq.publish(topic, msg, 0);<br> }<br>
[b]ws-paho.html[/b] https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js
<br> var client = null;<br> var url = "ws://localhost:9001/";<br> var topic = "test/rensanning/ws";<br> var time = 0;<br> function conn() {<br> if ("WebSocket" in window) {<br> console.log("WebSocket is supported by your Browser!");<br> client = new Paho.MQTT.Client(url, "ClientId");<br> client.onConnectionLost = onConnectionLost;<br> client.onMessageArrived = onMessageArrived;<br> client.connect({onSuccess:onConnect});<br> } else {<br> console.log("WebSocket NOT supported by your Browser!");<br> }<br> }<br> function sub() {<br> client.subscribe(topic);<br> }<br> function pub() {<br> time = time + 1;<br> var msg = "ws test by mqttws31.js. " + time;<br> var message = new Paho.MQTT.Message(msg);<br> message.destinationName = topic;<br> client.send(message);<br> }<br> function onConnect() {<br> console.log("CONNACK");<br> }<br> function onConnectionLost(responseObject) {<br> console.log("Lost connection");<br> if (responseObject.errorCode !== 0)<br> console.log("onConnectionLost:" + responseObject.errorMessage);<br> }<br> function onMessageArrived(message) {<br> console.log("PUBLISH " + message.destinationName + " " + message.payloadString);<br> }<br>
모든 connection 을 하나씩 실행 하고 subscribe 를 하나씩 실행 합 니 다. 마지막 으로 Publish 메시지 들 은 websocket 이 든 mqtt 이 든 모두 정확하게 처리 할 수 있 습 니 다.
[img]http://dl2.iteye.com/upload/attachment/0128/4460/cf5c654d-411b-3c2c-9aeb-59612134053b.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/4462/bd27c59f-7ff9-37cf-bdbf-6a5db1880982.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/4464/1a4beacc-b131-3308-900b-f7f4f56f91fb.png[/img]
웹 소켓 의 HTTP 와 Packet 을 확인 합 니 다:
[img]http://dl2.iteye.com/upload/attachment/0128/4466/51082975-e23d-3097-a61b-d6a1fa2a0409.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/4468/a1cbab93-82ef-357c-b05e-005a5fc526c6.png[/img]