2017-03-22 6 views
1

나는 HiveMQ Websocket Client에서 일하고 있는데 message delivery과 관련된 몇 가지 문제에 직면 해있다. 그래서 나는 단어를 보았습니다. PUBACKMQTT PUBACK 웹 소켓

제가 제 이해에 대해 설명하고 나서 제 질문을하겠습니다.

QOS1으로 메시지를 보낼 때마다 hivemq 서버가 PUBACK 콜백으로 발신자를 확인합니다.

이제 webSocket에서 onPubackReceived 이벤트를 구독 할 계획이지만 메시지를 보낸 후에 이벤트가 실행되지 않습니다.

내 코드 :

var clientId = ClientIdentifier; 


    mqtt = new Messaging.Client(
        host, 
        port, 
        clientId); 
    var options = { 
     timeout: 3, 
     keepAliveInterval: 60, 
     useSSL: useTLS, 
     cleanSession: cleansession, 
     onSuccess: onConnect, 
     onFailure: function (message) { 
      connected = false;    
      setTimeout(MQTTconnect, reconnectTimeout); 
     } 
    }; 

    mqtt.onConnectionLost = onConnectionLost; 
    mqtt.onMessageArrived = onMessageArrived; 
    mqtt.onPubackReceived = OnPubackReceived; 

모두 연결이 손실 및 메시지가 도착하지만, onPubackReceived이 발사되지 않을 때 onConnectionLostonMessageArrived이 제대로 발사됩니다.

올바르게 이해했거나 실수를하고 있다면 알려주세요.

+0

어떤 브로커와 버전을 사용하고 있습니까 ?? –

답변

4

이 문제는 HiveMQ 문제가 아닙니다.

구현의 시작점으로 HiveMQ Websocket Client을 사용했다고 가정합니다.

어쨌든 Paho MQTT Client에는 onPubackReceived 필드가 없습니다. 유스 케이스 나 메시지 전달 문제에 대해 자세히 설명하면 올바른 방향으로 안내 할 수 있습니다.

EDIT : 설명하는 내용은 MQTT에서 Quality of Service 1입니다. 적어도 한 번 이상 메시지를 받았다는 보장입니다.. PUBACK이 수신되지 않으면이 보장을 유지하여 메시지를 다시 보내는 것은 클라이언트 구현 작업입니다. 응용 프로그램에서이 동작을 수동으로 방해하면 클라이언트의 지속성과 관련하여 불일치가 발생합니다. 설명을 위해 : 단순히 duplicate=true으로 설정해도 메시지가 중복으로 인식되지 않습니다. 또한 원본과 동일한 messageID을 가져야합니다. 실제로 서비스 품질을 유지하는 paho.js에 대한 문서를 찾을 수 없습니다. 그러나 MQTT.js은 수행합니다.

QoS 1 : 적어도 한 번 수신 됨 : 클라이언트가 서버로부터 확인을받지 않는 한 패킷이 전송되고 저장됩니다. MQTT는 수신 할 것을 보증하지만 중복이있을 수 있습니다.

일을 요약하면 :

  • 재전송 메시지로, 더 PUBACK는에 수신되지 클라이언트 개체의 일이다되었다. 이 부분은 MQTT specification의 일부입니다.
  • WebSocket을 통해 MQTT.js 작품을 사용하고이 도움이 QoS levels

희망을 유지하기 위해 보장합니다.

+0

제 경우에는 mqtt에 연결될 때 메시지를 보내고 그 메시지의 '상태'를'보낸 '것으로하지만 때로는 MQTT 서버의 tcp에 도달하지 못합니다. 그래서 우리는'PUBACK'을 구현할 것을 고려했고, 우리가 그 돈을받지 못하면'dup flag '로 그 메세지를 다시 재전송 할 것입니다. – RealSteel

+0

웹 소켓에서 PUBACK 응답을받을 수있는 다른 라이브러리를 제안 해 주시겠습니까? – RealSteel

+0

원본 답변의 수정 사항보기 – fraschbi